Introduction
Wanted to do a short writeup about my time at AMD these past couple months. Not to be a LinkedIn poster, but honestly if I don't write about stuff more, I might completely lose the ability to. So here goes.
Experience
Got the notification that they'd be coming on campus towards the end of my vacation. Applied, sat through an hour-long interview where they grilled me on last summer's work at HAL and pretty much everything I've worked on so far. Did pretty well — got a positive reply a couple days later.
Moved out to Hyderabad for the duration of the internship. The office was pretty sweet, and my working area was especially cool — we had this experimental-ish vibe going on with sprawling desks, open GPUs scattered around, and cables everywhere. It was like passive smoking, but with bleeding-edge tech instead of cigarettes. Fortunately, my living situation worked out well, so I could get to the office by 7 AM to spend as much time as possible with the machines.
Was assigned three machines in total, and for a while there I was working with four monitors. Really made me *feel* like a full-time corpo guy — god, it was fun. The first few weeks were mostly getting familiar with the codebase, build tools, and typical new hire stuff. Once I'd cut my teeth on that, they threw some bugs my way — mostly coverage issues in the new features. Things went well, though I did manage to escalate what should've been a 2-line fix into a full function refactor. (Pro tip: never make your if-else ladders too deep.)
The main project was where things got really interesting. They asked me to pick up where a previous intern had left off — an idea he couldn't complete before his term ended. The project was a VidPN network manager and log capturing mechanism for Windows systems, essentially letting us see all display resolution details in one place instead of hunting through Windows settings (which, let's be honest, keeps getting more mystifying by the day).
I ended up remaking the whole thing from scratch since the inherited codebase was pretty messy, then added some new features related to the *** mechanism. Most of the backend was in C++, with a main Node process orchestrating the data and frontend processes for the Electron app.
Here's a fun tangent: did you know that by default, a C++ executable that prints to the terminal runs in line buffer mode when executed directly, printing each line as soon as it's ready? But if you run it through a pipe, it switches to block buffering — capturing 4-6KB of data before releasing it to the other end. I did not know this, and spent a couple days implementing every trick in the book on the frontend to make log capture real-time. I'm talking ring buffers on ring buffers handling real-time parsing and UI updates — it was a thing of beauty. When I finally figured out the actual issue, I felt pretty stupid. All you have to do is flush stdout immediately after printing to emulate line buffer mode even when piped.
I did submit a proposal to rewrite the whole thing in a native GUI framework, but that would've taken considerable time. We decided it was better to have the whole thing working first before worrying about large-scale rewrites.
Wrapped everything up nicely with a week to spare. Handled some last-minute updates, built the docs and work report, and delivered what I'd say was a pretty amazing final presentation.
All in all, it was a phenomenal time. Learned a ton, got to work with some seriously cool hardware, and discovered that Windows display management is even more complex than I thought possible. (Ok, this is a lie. Windows structure is a mess and I was scared of it the moment they told me I'll be working on it; Microsoft please hire me I will write w12 from scratch and make it coherent I'm so serious.)