Stephen Verderame

About

Hi, I’m Stephen. I’m mainly interested in programming languages (PL) and compilers, but I’m also fond of computer architecture and graphics. I recently starting working as a compiler engineer on Metal, Apple’s graphics and GPU programming language. I like a broad range of PL-related things with some special interest in compiler technologies and languages for heterogeneous or parallel computing

In school, I was a part of the Capra research group where I created a frontend for Caiman, a research IR and compiler for heterogeneous programming that allows independent specification of device communication, allocations, and values computed to ease design space exploration and optimization.

I also compete in XC mountain bike races (with the occasional road race) and enjoy cooking. I like to think of myself as a mildly competitive amateur XC racer.


Latest Posts

Jan 2, 2025

Unsolicited Advice for (soon-to-be) Undergrads

Having somewhat recently finished my undergrad and MEng, I wanted to take some time to reflect on my educational experience so far. I’ve only experienced a small slice of the potential pathways in the US education system. I will try to generalize, but who knows how that will go. This is a collection of things I would say to my younger self, advice I have given to people before, and things I just feel like should be said. Read more


Nov 30, 2024

Synthesizing Variable Initializations in CPS Programs

I recently added holes in the caiman frontend. These enable a user to only write part of a schedule, and have the compiler determine the details, using user provided specs. A hole is essentially an expression or statement that can stand in for anything the compiler might want to put there. The frontend is responsible for performing type deduction, and part of a type in caiman is a linear representation of whether the type is “usable” (initialized and not used) or “dead” (uninitialized or initialized but consumed). Read more


Jun 3, 2024

Chordal Graph Register Allocation

Register allocation is commonly framed as a vertex coloring problem on an interference graph, where vertices represent virtual registers and edges connect two virtual registers that interfere (belong to the same live-out set of a program point). A classic method, due to Chaitin1, is to do register allocation via graph coloring with a set of heuristics to make the problem more easily computable, as vertex coloring is an NP-Hard problem. Read more


All Posts

Projects