Skip to content

Commit 437338a

Browse files
TeXitoialexcrichton
authored andcommitted
shootout-nbody improvement
- factorize operation - factorize loop (and gain a level of indentation) - ~5% faster Thanks to @Ryman for the propositions :)
1 parent 48beab1 commit 437338a

File tree

1 file changed

+20
-23
lines changed

1 file changed

+20
-23
lines changed

src/test/bench/shootout-nbody.rs

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -70,33 +70,30 @@ struct Planet {
7070

7171
fn advance(bodies: &mut [Planet, ..N_BODIES], dt: f64, steps: int) {
7272
for _ in range(0, steps) {
73-
{
74-
let mut b_slice = bodies.as_mut_slice();
75-
loop {
76-
let bi = match b_slice.mut_shift_ref() {
77-
Some(bi) => bi,
78-
None => break
79-
};
80-
for bj in b_slice.mut_iter() {
81-
let dx = bi.x - bj.x;
82-
let dy = bi.y - bj.y;
83-
let dz = bi.z - bj.z;
73+
let mut b_slice = bodies.as_mut_slice();
74+
loop {
75+
let bi = match b_slice.mut_shift_ref() {
76+
Some(bi) => bi,
77+
None => break
78+
};
79+
for bj in b_slice.mut_iter() {
80+
let dx = bi.x - bj.x;
81+
let dy = bi.y - bj.y;
82+
let dz = bi.z - bj.z;
8483

85-
let d2 = dx * dx + dy * dy + dz * dz;
86-
let mag = dt / (d2 * d2.sqrt());
84+
let d2 = dx * dx + dy * dy + dz * dz;
85+
let mag = dt / (d2 * d2.sqrt());
8786

88-
bi.vx -= dx * bj.mass * mag;
89-
bi.vy -= dy * bj.mass * mag;
90-
bi.vz -= dz * bj.mass * mag;
87+
let massj_mag = bj.mass * mag;
88+
bi.vx -= dx * massj_mag;
89+
bi.vy -= dy * massj_mag;
90+
bi.vz -= dz * massj_mag;
9191

92-
bj.vx += dx * bi.mass * mag;
93-
bj.vy += dy * bi.mass * mag;
94-
bj.vz += dz * bi.mass * mag;
95-
}
92+
let massi_mag = bi.mass * mag;
93+
bj.vx += dx * massi_mag;
94+
bj.vy += dy * massi_mag;
95+
bj.vz += dz * massi_mag;
9696
}
97-
}
98-
99-
for bi in bodies.mut_iter() {
10097
bi.x += dt * bi.vx;
10198
bi.y += dt * bi.vy;
10299
bi.z += dt * bi.vz;

0 commit comments

Comments
 (0)