HNHacker News
TopNewBestAskShowJobs

brooksbp

658 karma · joined November 19, 2007

submissionscomments
brooksbp··on Intel announces new FPGA families
I can only imagine how long it will take the fitter to pnr these insanely wide busses. Maybe a 13th gen CPU overclocked to 8GHz would be handy.
brooksbp··on Biomanufactured materials are coming
> be very careful about betting against incumbent tech

Can you elaborate on why you think 'incumbent tech' has anything to do with Amyris stock price?

Here's what I see just briefly looking at some numbers and slide decks:

Amyris has OK revenue growth and gross margin, but wow do they burn a lot of cash. They took on massive convertible debt back in Nov 2021, are continuing to do M&A, and in most recent earnings report are blaming horrible EBIDTA performance on 'higher freight and logistics and increased SG&A, mostly marketing investments'...

  1. Revenue growth
  2. Product innovation
  3. Management
I think a lot of investors make investment decisions based on #2. The product is great. Next-gen technology. Perhaps #1 follows... But even if you get #1 and #2 right, #3 can make or break the valuation of a company. It's not clear that Amyris has a path to profitability and the revenue growth is far from earth-shattering.
brooksbp··on I should have loved biology
I pre-ordered the 7th Edition a month before release and it still hasn't shipped. The demand for this new edition is nuts!
brooksbp··on I should have loved biology
A lot of job descriptions I see are looking for people who already have the scientific formal education background and expect them to do the software engineering aspect too. I haven't really seen generic Software Engineer job descriptions where a science background is the secondary requirement. If you have any pointers I would greatly appreciate them!
brooksbp··on Meshtastic is an encrypted communications platform for the Lora RF protocol
Why isn't the LoRa PHY spec open source?
brooksbp··on Ask HN: Software career at 38 after being a quant
I started my career as a Software Engineer and worked in various domains (packet processing, performance optimization, hardware testing) and recently switched to an FPGA Engineer role. I know what you mean. I am "not good enough" too. I spend a lot of spare time on fundamentals. But, I am good enough to work with others. I am good enough to apply my practical engineering experience to whatever needs to be accomplished. And I am good enough to enjoy my work.

Many people do not consider the actual job requirements and skills necessary for the work. It's like, they're just trying to find the best person possible. Some people are even hardcore about this; they test you and judge you quite aggressively. That's cool, and there is some truth to that; there is a bar that needs to be met. But, it's a rather shallow perspective. And, it can have negative consequences. E.g. people burn out, get bored, don't work well with others. There's overlooked value in getting to know a person and positioning them well in a role.

You might be surprised. Your experience from side projects may translate extremely well to a "real" job doing similar things. If you can stay humble, work well with others, and spend time on fundamentals, I think you'll do well in the right environment.

As an aside, within the past year I've sparked an interest and appreciation for biology. In the back of my mind, I sometimes think it would be very fulfilling to work on software/hardware for biotech at some point in the future. Maybe a "second career" type of deal. I have massive "imposter syndrome" about that, but who knows... maybe some day my path will lead me there.

brooksbp··on Ask HN: Burnt-out, directionless but want to turn it around
Yeah, you are in a rut. If you keep doing what you're doing, you'll stay there. You'll need to be honest with yourself about how much change you're willing to take on and at what pace. Or, you could just stay in your comfortable rut.

You want to switch jobs? You'll need to explain yourself and demonstrate some basic coding and thinking abilities to complete strangers. This sucks if you're all stressed out. Don't go banging your stressed-out head against leetcode trying to jump ship. Just try to improve your life right now. Start making tiny changes and decisions that get you ahead. You'll feel much better, and it'll put you in a better position to move on.

First thing I'd recommend is to get away from work. Like... stop spending time on work.

- Start being more efficient; get the stuff done quicker.

- Give yourself more time when estimating.

- Explain the work breakdown in order to raise questions about priority and scope. Work on the highest priority stuff; don't spend time on the other stuff.

- Engage with others. Ask for help. Identify people who can be a resource. E.g. if given 3 days to do task X, will you grind through it (higher stress) over 3 days, or will you schedule some time with someone you have a good relationship with who is better at it and can accelerate getting task X done (lower stress)?

Part of a manager's job is to literally help you do the above things. Use your manager to discuss these things.

The bad news is that you've already shown to everyone you work with that you're a workaholic. So you're gonna have to get creative in how you apply this. But you can do it, as long as you keep your performance up.

Next thing I'd recommend after being able to 1) step back from work 2) while still performing... is to get into other things for fun. You need to tap back into the good stuff. The stuff you enjoy and are interested in. Just spend time on that. Not what other people think is cool. Not for popularity (yeah, you mentioned those libraries on GitHub). But what you want to do. It could improve your life a lot. Just do what you want to do.

brooksbp··on Bits of advice I wish I had known
I relate to this. Looking back, the troubled path always provided the most engaging feedback loops, sadly.
brooksbp··on The cult of Amiga and SGI, or why workstations matter
I respectfully disagree to this very common argument against ifdefs, and will also point out that developers who hold this anti-ifdef belief hold it quite strongly! I generally prefer the ifdef-style.
brooksbp··on A Linux security fix briefly breaks DMA
Right, so this is about supporting legacy hardware. Nobody today is designing a chip with IP that cannot support an AxADDR width that is equal to the architecture's bit width (64 or 32), right? Right? shakes fist in rage
brooksbp··on A Linux security fix briefly breaks DMA
Wouldn't it be nice if the OS always allocated buffers in an address space that is guaranteed to be accessible by the peripheral device?

Wouldn't it be nice if the OS managed an IOMMU so the peripheral device could not access memory it is not allowed to access?

I'm scratching my head wondering why these problems still exist today..

brooksbp··on Ask HN: How does a CPU communicate with a GPU?
Wow, this is awesome. Definitely will speed up creating such drawings. Thank you!
brooksbp··on Ask HN: How does a CPU communicate with a GPU?
:)
brooksbp··on Ask HN: How does a CPU communicate with a GPU?
> is there any reasonable prospect of keeping one's GPU from being able to read and write to literally anywhere in physical memory?

This is the purpose of an IOMMU.

> I.e., a practical way a kernel and driver might be able to forward to the GPU only commands and shaders that can access only your process memory, and nobody else's, and your process's pixels, and no other process's pixels, when they live in GPU RAM?

So IOMMU and the GPU's MMU.

> For all I know, this is the norm for all GPUs

What?

> but I wonder why it is hard, then, for VMs to share a GPU.

Engineering is hard.

brooksbp··on Ask HN: How does a CPU communicate with a GPU?
> Yeah, your explanation really hits the nail in regards to what I was trying to understand

:)

There's a lot of knowledge, and acronyms, and BS out there. E.g. there is no need to discuss PCIe here. It's much easier, and enjoyable, to cultivate a simple understanding of fundamentals. Build up from there. Reduce it down to your own simple model.

Interconnects focus on the transfer of data between components in the system. Topics like topology, switching/routing, and performance come into play. But, for the purposes of the simple model described above, all you really need to grasp is topology. I.e., how are things connected and where is data flowing?

The memory model is another extension to the simple model described above. Both the CPU and the GPU have access to DRAM memory (shared memory). The CPU can send transactions to the GPU, and the GPU can interrupt the CPU. These are all different paths thru the system. But, remember that we described a very specific order of events that need to happen for shared memory communication between CPU and GPU. E.g. (1) the CPU sends transactions to the DDR controller to store some information in DRAM memory, and then (2) sends a transaction to the GPU to inform the GPU that it can now (3) send transactions to the DDR controller to retrieve that information from DRAM memory. But what if (1) and (3) happen much faster than (2)? The GPU will get old data, not the new data that was written by the CPU. Managing these order of events in the system is what the memory model is all about. What if shared memory exists not only in DRAM memory but also in caches elsewhere in the system?

Edit:

Back to your question of "how a CPU tells a GPU to start executing a program"...

In the simple model, you could imagine something like: (1) CPU stores the shader program in DRAM memory. (2) CPU writes a GPU register informing the GPU of what address the shader program is located at in DRAM memory. (3) CPU also informs the GPU of the size of the shader program. (4) GPU loads the shader program from DRAM memory. (5) GPU starts executing shader program.

brooksbp··on Ask HN: How does a CPU communicate with a GPU?
Woah there, my dude. Let's try to understand a simple model first.

A CPU can access memory. When a CPU performs loads & stores it initiates transactions containing the address of the memory. Therefore, it is a bus master--it initiates transactions. A slave accepts transactions and services them. The interconnect routes those transactions to the appropriate hardware, e.g. the DDR controller, based on the system address map.

Let's add a CPU, interconnect, and 2GB of DRAM memory:

  +-------+
  |  CPU  |
  +---m---+
      |
  +---s--------------------+
  |      Interconnect      |
  +-------m----------------+
          |
     +----s-----------+
     | DDR controller |
     +----------------+
  
  
  System Address Map:
  
    0x8000_0000 - 0x0000_0000  DDR controller
So, a memory access to 0x0004_0000 is going to DRAM memory storage.

Let's add a GPU.

  +-------+    +-------+
  |  CPU  |    |  GPU  |
  +---m---+    +---s---+
      |            |
  +---s------------m-------+
  |      Interconnect      |
  +-------m----------------+
          |
     +----s-----------+
     | DDR controller |
     +----------------+
  
  
  System Address Map:
  
    0x9000_0000 - 0x8000_0000  GPU
    0x8000_0000 - 0x0000_0000  DDR controller
Now the CPU can perform loads & stores from/to the GPU. The CPU can read/write registers in the GPU. But that's only one-way communication. Let's make the GPU a bus master as well:

  +-------+    +-------+
  |  CPU  |    |  GPU  |
  +---m---+    +--s-m--+
      |           | |
  +---s-----------m-s-----+
  |      Interconnect      |
  +-------m----------------+
          |
     +----s-----------+
     | DDR controller |
     +----------------+
  
  
  System Address Map:
  
    0x9000_0000 - 0x8000_0000  GPU
    0x8000_0000 - 0x0000_0000  DDR controller
Now, the GPU can not only receive transactions, but it can also initiate transactions. Which also means it has access to DRAM memory too.

But this is still only one-way communication (CPU->GPU). How can the GPU communicate to the CPU? Well, both have access to DRAM memory. The CPU can store information in DRAM memory (0x8000_0000 - 0x0000_0000) and then write to a register in the GPU (0x9000_0000 - 0x8000_0000) to inform the GPU that the information is ready. The GPU then reads that information from DRAM memory. In the other direction, the GPU can store information in DRAM memory, and then send an interrupt to the CPU to inform the CPU that the information is ready. The CPU then reads that information from DRAM memory. An alternative to using interrupts is to have the CPU poll. The GPU stores information in DRAM memory and then sets some bit in DRAM memory. The CPU polls on this bit in DRAM memory, and when it changes, the CPU knows that it can read the information in DRAM memory that was previously written by the GPU.

Hope this helps. It's very fun stuff!

brooksbp··on The Price of Discipline
It's better when you find something you enjoy. Some people don't enjoy what is traditionally presented to them via standard education and upbringing. But if you can branch out, and find something that tickles or scratches that itch. Oh boy.. applying discipline comes a lot easier and is rewarding.
brooksbp··on Ask HN: Nerds of HN, did you overcome loneliness?
I feel compelled to offer some advice here. Please hear me out..

I'm pretty socially awkward. I don't have "friends". I don't go to movies. I don't plan lunch dates. I don't host parties. I rarely ask people to do things. I don't have a "social life". I've been lonely. I still get lonely sometimes. But.. I love it. I feel good. And I like the people that are in my life.

> Has anyone here ever made good progress in connecting with other people?

Yes. As a side effect of doing what I love to do.

Focus on what you love to do. Dig into it. And you will find other people who love to do those things too.

Acknowledge your loneliness. Embrace it. Stop worrying about it. It's not a "problem" that needs fixing. Avoid self-help resources, if you can. And do not pretend that someone else can "fix" this for you. You are the only one who can be you. Redirect your mindset. If you continually tell yourself that you're lonely, don't have friends, and have no connection, you will be miserable and stuck in a rut forever. If your actions are motivated by trying to "better your social life", you will feel empty inside. Stop that. Forget about all of that. Just do what you love to do, and cultivate that. It's much easier to connect with someone when you are working, building, or playing something. You will find people along the way. One or two might stick, and many won't. There are so many different people in this world! And that's OK.

Honestly ask yourself what you love to do. If you were financially independent, what would you spend your time on? Who would you surround yourself with? What pursuit, mission, or deeper meaning would bring you together?

brooksbp··on Modern C++ for C Programmers (2018)
It gets real fun when "going fast" is less about the software and more about what's happening inside the chip!
brooksbp··on Creating Languages in Racket (2011)
What about "Semantics Engineering with PLT Redex"?
brooksbp··on CoroBase: Database engine using C++20 coroutines to hide cache misses
Even if you know which accesses have a high probability of missing in core or chip cache, it is tricky to write portable software that takes advantage of (switches/branches to other work) the time it takes between prefetch and data available in L1. It is not just architecture specific, or microarchitecture specific, it's chip specific.
brooksbp··on An Interactive Introduction to Fourier Transforms
Can you recommend any good textbooks?

"The Scientist and Engineer's Guide to Digital Signal Processing" is a bit too verbose and hand wavy for my liking; looking for something more succinct and rigorous.

brooksbp··on FPGA/DNN Co-Design: An Efficient Methodology for IoT Intelligence
I'm reaching for my popcorn while you rage away at this guy.. while my design synths in Vivado..
brooksbp··on Ask HN: Codebase at my work is a complete mess, what should I do?
> I've already made some comments about rewriting it and the response was basically "ok".

Do it.

Gradually.

Rename. Simplify. Reduce. Enhance. Test. Slice and dice.

Embrace the shitiness. Accept it. Own it.

It's your playground. Sharpen your skills, and lead them to the promised land.

It could be worse. You could face major resistance and people issues. Appreciate it.

This is an opportunity for you to kick a billion miles of ass...

brooksbp··on Cognitive Distortions of People Who Get Stuff Done (2012) [pdf]
holy fuck. this is me.

.. and half the time i can't tell whether i'm kicking serious ass (rewarded) or causing people trouble (fired)!

brooksbp··on An FPGA-based In-line Accelerator for Memcached (2013) [pdf]
There aren't Ethernet interfaces (transceivers, PCS/PMA, MAC) on the AWS FPGAs?
brooksbp··on Ubuntu 18.04: Unity is gone, Gnome is back, and Ubuntu has never been better
Looks quite nice!
brooksbp··on Freelancer.com has ruined my life
Never.. ever.. catch yourself in a race to the bottom.
brooksbp··on You fired your top talent. I hope you’re happy
1:1 conversations outside of normal work context can help. Dropping the work context is critical to having a human:human conversation. Most people don't have the heart to do it (for real).

If your approach always begins/ends with 'from my side' or even worse 'from our side' (team/mgmt context), you will always fail to connect with and influence someone like Rick. This sort of language will just reinforce the division between Rick and everything else.

It takes one to know one. If you know that someone like Rick is just 'so different', or if you just have that 'gut feeling', you need to find someone who can connect with Rick. An age gap (20+ yrs) helps too; reach out to the respected elders in the company.

If you can show that you care about this person, and want them to be successful and healthy, then they might start to listen to you. All you really need is their attention.

brooksbp··on Why some of the best developers keep quitting

  People quit because the modern, zero-loyalty, everyone-for-hire company does not provide a long term strategy for providing intrinsic motivation (autonomy, mastery, purpose); they don't want to pay for retention and therefore don't provide perks for retention.
The culture around ROI is a massive factor. Too short? Too long? It has to be balanced.

Another belief I hold: most people want to be told what to do.. to a certain degree. That's the trick.

The political way of phrasing this is that leadership also has to be balanced. Too much results in predictability and people getting bored. Too little results in people feeling lost.

← PreviousPage 2 of 9Next →