Comparing shared-memory platforms for performance engineering
We break down key features to help you choose the right platform for writing fast code.
I was drafting a new Fastcode flyer a few weeks ago, when Charles Leiserson suggested including a feature-comparison table. “Let’s help people choose the right platform for their software performance engineering,” he said.
So I asked my teammates, “If you had less than half a page for a feature-comparison table, which SPE platforms would you compare, and which features would you use to compare them?”
A short list of shared-memory platforms for SPE
There are lots of platforms for SPE. We made a short list with the help of the following figure from Parallel C++, the standard reference for efficient and scalable high-performance parallel programming using HPX:

The book mentions two other notable languages for parallel programming: Julia and Rust. A comparison of these and others is available here.
From this we arrived at our short list of five shared-memory platforms for SPE:
Key features to consider
After a few freewheeling conversations about the pros and cons of the selected platforms, we arrived at our list of features. Each one essentially asks a question. In each case, we don’t mean to imply that there is a “right answer” to the question, but we do think the question is probably important to consider in the context of your SPE scenario.
Interface: How do you connect with the platform? Is it a language or a library?
Parallel model: How does the platform model parallel execution?
Programming model: How do you write code for the platform to compile/run?
Availability: What environments allow you to connect with the platform?
Performance model: How does the platform measure parallel performance and scalability?
Semantic model: Can the platform guarantee serial semantics?
Good for teaching X: What topics does the platform naturally bring to the user’s attention?
Putting it together
With our two short lists (of platforms and features) in hand, our final challenge was clear: how to describe each feature of each platform in a compact, easy-to-read table. Below is the result. Judge for yourself!
How did you choose your platform for SPE?
The Fastcode team loves OpenCilk (as you might guess), and I will write more about that in a future post. For now, I’m curious to hear from you. What platform do you use for SPE and why?