658 karma · joined November 19, 2007
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.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.
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.
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..
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.
:)
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.
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!
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?
"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.
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...
.. and half the time i can't tell whether i'm kicking serious ass (rewarded) or causing people trouble (fired)!
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.
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.