AMD ROCm: A Wasted Opportunity
&gt; And worse, different binary slices are used between different dies of the same product line. As an example, for RDNA2, ROCm math libraries are compiled only for Navi21. This means that on a (smaller) Navi22 die (notably present in the 6700 XT), those components aren’t functional. The workaround is manually recompiling ROCm with support for more targets. Such a roadblock is very discouraging for adopters – and does complicate application distribution too.<p>holy shit I didn&#x27;t realize the portability story was <i>that</i> bad, it can&#x27;t even target a whole uarch&#x2F;family at once (eg target all RDNA2) and it has to know about every specific die it will ever run on?<p>yeah I mean that&#x27;s the deep deep problem with ROCm is there&#x27;s no equivalent to PTX, AMD just wants you to distribute source and recompile everything at runtime, everything about ROCm pushes you towards source distribution rather than any kind of bytecode&#x2F;IL or gosh even an executable file you could actually just run.<p>On NVIDIA the support story is simple:  the driver does the final translation from PTX to assembly at runtime, so, as long as there is at least one overlap in the PTX versions packaged in the app and the PTX versions supported by the driver, it runs.<p>In practice this means you can take a program that was compiled for a CUDA 1.0 GPU (tesla uarch) and it&#x27;ll run today on an ada, no questions asked.  You might be leaving performance on the table by not fully exploiting the newer uarchs, but it&#x27;ll run, just like x86.  And you can take a program today and compile it against CUDA 1.0 capability targets (as long as it doesn&#x27;t use any features that don&#x27;t exist in those older versions) and the full 2023-era software toolchain will all just magically work on your 8800GTX even though driver support for that hardware has been dead for 10+ years.  Because the driver knows how to run PTX 1.0 and the toolchain knows how to build PTX 1.0, and that&#x27;s all that matters.<p>ROCm has always really struck me as being aimed at the HPC market - only supporting pro-tier GPUs, focusing on users who are already running custom software, openly disdaining amateur support, etc.  And frankly the distribute-as-source model makes ROCm just a complete nonstarter for any sort of commercial or other model where the vendor would absolutely be distributing libraries or a compiled application, let alone trying to wrangle dumb customers through getting a working ROCm environment.  Which right now is the authentic &quot;linux in 1995&quot; level experience&#x2F;ordeal.<p>Getting serious would be restarting the GPU Ocelot project and going after PTX compatibility.  But a corporation is never going to accept being a client on someone else&#x27;s platform, just like they won&#x27;t support the open-source Streamline framework because something something &#x27;pluggable frameworks and library code are anti-user-freedom&#x27;.  Same thing there too, AMD will only support FSR in statically-compiled code and they expect everyone to recompile all their shit and validate and push updates for every single game, every time AMD releases an update, because it&#x27;s inconvenient for AMD&#x27;s corporate strategy.<p><a href="https:&#x2F;&#x2F;youtu.be&#x2F;8ve5dDQ6TQE?t=974" rel="nofollow">https:&#x2F;&#x2F;youtu.be&#x2F;8ve5dDQ6TQE?t=974</a><p>(oh and now that they finally have the ML hardware, the rumor is they&#x27;re working on their own ML-based upscaler, quelle surprise that the &quot;gosh we would never do anything that legacy users couldn&#x27;t run&quot; was just a bit too.)<p>AMD doesn&#x27;t want user freedom, they want to be the one with the leash.  That&#x27;s why they do the source-distribution-only model... you&#x27;ll have to work with your code in the ROCm ecosystem and not NVIDIA&#x27;s.  You&#x27;ll be compiling against HIP and not NVIDIA&#x27;s stuff.  Etc etc.  It&#x27;s not a zero-effort thing to leap the gap, and they want to keep you once you do it, you&#x27;ll have the same leap to get back out.