Announcement time - today is my last day at AMD. I’ll be taking a few weeks off, before starting a new gig at Unity mid-July.
It is also the end of my five year involvement in Vulkan & SPIR-V - having contributed to both specifications since 2014.
I’ve very much enjoyed my time in this slice of the industry, but it was time for a new challenge.
I’ve been at AMD a little over a year now - and it has been an interesting challenge. I was brought in to improve the performance of the LLVM compiler stack (LLPC) as compared to the legacy Shader Compiler (SC). All-in during my time there I improved the LLVM stack by just over 2x performance across a raft of key shaders, which I am pretty proud of.
I also implemented a bunch of fun shader extensions in the stack which was a lot of fun (VK_EXT_buffer_device_address, VK_KHR_vulkan_memory_model, and quite few secret-sauce ones still to come!).
I think the stack is in a good state going forward.
As always - there is always a few things about any employment that aren’t as great. AMD is an old company, 50 years old this year. Some of the internal systems feel about that old too. Doing expenses is a pain - the system is archaic and frustrating, getting new hardware wasn’t always as easy as it could be, and I wasn’t quite prepared for cross-team politics that a big company like AMD is going to have.
The other thing I really wish I had asked about before I start was how code is actually written. Perforce was the main version control system I used while at AMD, and I find perforce to be an unmitigated disaster for software development. I genuinely think I was at about 10% of my peak productivity.
I think coming from a relatively small company like Codeplay (about 85 people when I left) who had much leaner systems and which individuals could easily move the needle left me a little ill-prepared for the reality of a big companies. You live and learn - I am now much wiser.
That being said - I still did some good and enjoyable work, made some positive changes, and made some good friends. AMD has a bunch of really talented staff that move mountains to make good changes.
I’ve been working on the Vulkan & SPIR-V specifications for about five years now, and I was instrumental in getting a bunch of really important features (most notably the subgroup operations in Vulkan 1.1 / SPIR-V 1.3) through. People often mock design-by-committee for arguing over what they see as death-by-over-design - but I found the whole standards process to be a really amazing collaboration between what are effectively enemy companies. They fact you have so many eyes on the same set of specifications means that you get a much better and more rounded result.
I’ll miss my weekly phone calls discussing the ins and outs of how shaders execute on all the fun hardware we make them work on. There is some good features that I worked on in Khronos to come to developers in future - I look forward to people getting to use some of my final specification work!
I’m Bursting to Tell You What Is Next⌗
Even though I’ve looked about 70 years old since I was 15 - I’m not retiring or anything like that!
I’ve decided to join Unity to work on the Burst Compiler. The Burst Compiler is something that is incredibly interesting to me as a compiler engineer - lets take a language and add all the constraints we require to reduce it to a performance-orientated subset, and make a compiler that can make this code run fast. After some initial discussions with Lucas Meijer, and many conversations with Andreas Fredriksson and Alexandre Mutel I was 100% convinced. The chance to make such a big difference to so many developers lives is such a huge appeal to me personally - I always want my code to make a positive impact to as many people as I can. I also get to focus much more heavily on LLVM which is a technology I love to work with too - super excited!
A couple of weeks to relax (I have some extensive gardening still to do) and then I’ll be onboarding at Unity and getting to grips with all the future fun there is to have. I’ll keep y’all posted!