103 karma · joined May 30, 2013
Different constraints and challenges on both sides of the aisle give rise to compromises which end up with lowered performance or lowered ease of use. This is one area where great authority over the entire stack lends you lots of leeways, e.g. Apple designing Metal API and the HW for it.
You can't just peek another process' GPU memory thru UMD app, either. Per-process virtual memory mechanisms similar to CPUs are also present in GPUs, which is the whole reason that resources are explicitly imported/exported across APIs via special API calls.
Is there more to it other than the fact that as one gets older, one has higher expectations? I keep wondering about it...
I find choice of RISC-V pretty interesting for this use case as it's a fixed-size ISA and there is a significant amount of of auxiliary data usually passed from drivers to HW in typical GPU settings, even for GPGPU scenarios alone. If you look at one of their papers, it shows how they pass extra texture parameters via CSRs. I think this might come to be bottleneck and limiting factor in the design for future expansions. I am currently doing a similar work (>10x smaller in comparison) on a more limited feature set, so I am really curious how it'll turn out to be.
They are quite efficient for both HW and SW implementations.
Example: "I think that a meteor bigger than the Sun is on its way to hit the Earth could be bad news for the economy. However, it may also mean that markets will flourish."
It bothers me how little progress has been done on "shading" languages front compared to overall many-core computation models and capabilities over the years. And, that is despite the fact that shaders are very often where the most time is spent in modern workloads.
Compute with Vulkan is another story. It offers some nice abstractions, but it shows that it's mostly intended for async-compute/work-offloading for rendering, IMO. Too much fruction.
Memory interfacing of GPU commands-streaming/processing front-ends and system memory are very efficient, employing pre-fetching, etc.
Although memory access patterns of typical GPU workloads are very different than those of CPU workloads, there are GPU-local, hierarchical caches similar to CPUs for different purposes that are exclusive to shader cores/computation units, which can be even partitioned dynamically. The struggle on the GPU side is keeping all the cores busy while servicing memory requests efficiently. Sharing memory across small group of threads run in lockstep, for example, is a great way of doing it.
If I were a very determined, ultimate Bond villain* who set out to destroy the whole universe, what are my options? How bad can I fuck it up for all ? Back-to-back mega nuclear explosions occurring simultaneously on all planets within reach? Could that start chain reactions around our galaxy that'd bring it all down? What else?
* Funnily enough, I just started reading 'From Russia with Love' whose first few chapters deal with the unusually vicious nature of our henchman.
I always wondered if they did that, something akin to fuzzing tests in SW. Wouldn't it be useful to detect unexpected situations that'd be catastrophic? Or the benefits from it wouldn't outweigh the cost/time loss?
Yep, you just change the target platform and re-compile!
Is it because of not truly knowing what it takes to do VLSI nowadays or just hoping that if one man did it, it can be done again?