diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-10-09 10:54:28 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-10-09 10:54:28 -0400 |
| commit | cb8489f4fc1f30a5eff65c0d66478689395811b9 (patch) | |
| tree | 927897ae55f5ee27aaa7be47d5da54b40c6b1ab0 | |
| parent | 7438915e7a7679bcf143fd6b832771d358738819 (diff) | |
| download | balls-cb8489f4fc1f30a5eff65c0d66478689395811b9.zip | |
parallelize collisions
| -rw-r--r-- | balls.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -40,7 +40,7 @@ Color randColor(void); const static Rectangle bounds = {{-1.5, -1.0}, {1.5, 1.0}}; vector<Ball *> balls; -vector<vector<Collision>> collisions; +vector<vector<Collision>> collisionPartition; int main(int argc, char *argv[]) { @@ -64,7 +64,7 @@ main(int argc, char *argv[]) { } balls = makeBalls(nballs); - collisions = partitionCollisions(balls); + collisionPartition = partitionCollisions(balls); glutTimerFunc(FRAME_TIME_MS, animate, 0); @@ -84,6 +84,7 @@ display(void) { glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); drawBackground(); + /* TODO: parallel */ for (const Ball *b : balls) drawCircle(b->r, b->p, b->color); @@ -141,6 +142,7 @@ makeBalls(int n) { vector<Point> positions = noOverlapCircles(n); vector<Ball *> balls(n); + /* TODO: parallel */ for(i = 0; i < balls.size(); i++) { cout << "Creating ball " << i << "\n"; if ((balls[i] = (Ball *) malloc(sizeof(Ball))) == NULL) { @@ -202,13 +204,13 @@ animate(int v) { ball->p = ptAddVec(ball->p, ball->v); } - for (vector<Collision> layer : collisions) { - /* TODO: parallelize */ - for (Collision c : layer) { - collideBall(c.b1, c.b2); - } + for (vector<Collision> cell : collisionPartition) { + parallel_for(size_t(0), cell.size(), [cell] (size_t i) { + collideBall(cell[i].b1, cell[i].b2); + }); } + /* TODO: parallel */ for (Ball *ball : balls) collideWall(ball, bounds); |