I’m inspired by the ability of modern computer graphics cards to run large parallel simulations, so I set myself the goal of simulating 8 billion people using a graphics card in pursuit of creating a global democracy simulation for better understanding distributed democracy.
My first experiment simulating a large number of people is to consider each person to have a position and a velocity. I’ve implemented a basic particle simulation for 128 million particles, each particle using 8 bytes, or 2 RGBA pixels, of video texture memory. Without rendering the simulation to the screen, the GPU runs at a maximum speed of ~18 billion particle simulations per second. The rendering above is only showing 1/1024th of the total number of particles simulated because the screen becomes solid white if all 128 million are rendered.
I have not yet reached my goal of simulating 8 billion particles for a realistic democracy simulation, but I’ve learned a lot about tradeoffs between GPU and CPU memory processing sweet spots.
|Population||CPU speed||GPU speed|
|3 billion||1.5 billion / second|
|1.5 billion||1.5 billion / second||2.2 billion / second|
|1 billion||1.5 billion / second||2.4 billion / second|
|512 million||1.5 billion / second||2.9 billion / second|
|256 million||1.5 billion / second||4.2 billion / second|
|128 million||1.5 billion / second||15.4 billion / second|
|64 million||1.5 billion / second||16.8 billion / second|
|32 million||1.5 billion / second||17.7 billion / second|
|16 million||1.5 billion / second||18.2 billion / second|
|8 million||1.5 billion / second||18.2 billion / second|
|4 million||1.7 billion / second||17.5 billion / second|
|2 million||3.2 billion / second||16.3 billion / second|
|1 million||5.7 billion / second||14.0 billion / second|
|512 thousand||5.6 billion / second||11.4 billion / second|
|256 thousand||2.3 billion / second||9.0 billion / second|
|128 thousand||2.0 billion / second||5.4 billion / second|
|64 thousand||1.7 billion / second||3.0 billion / second|
|32 thousand||0.9 billion / second||1.5 billion / second|