Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch particle storage to struct of array #195

Merged
merged 5 commits into from
Sep 23, 2017
Merged

Switch particle storage to struct of array #195

merged 5 commits into from
Sep 23, 2017

Conversation

Luthaf
Copy link
Member

@Luthaf Luthaf commented Aug 28, 2017

Fixes #18

This is a work in progress, it needs benchmarks and feedback on the API!

The meat of the code is not in this repository, but in soa-derive.

Most of the changes here consists in system.particle(i).<xxx> => system.particles().<xxx>[i], or handling of the fact that when using for p in system.particles(), p.position is a reference.

The main issue with the code right now is the fact that the naive looping for p in system.particles() might be slower than in previous versions, due to the fact that a new ParticleRef is generated at each iteration step. To improve this, I will change the code so that it uses izip! iterators and directly access the needed fields.

Please have a look and tell me what you think !

/// Particle velocity, if needed
pub velocity: Vector3D,
#[allow(missing_docs)]
mod derive {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it mandatory to put the struct into an own module here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not at all, but it is the only way I found to use the #[allow(missing_docs)] here. I'll check if it is still necessary.

@g-bauer
Copy link
Contributor

g-bauer commented Aug 29, 2017

Nice work! I really like that we can use exactly those fields in a particle that are needed within the given context. Sure, it is a bit less convenient to use.

To improve this, I will change the code so that it uses izip! iterators and directly access the needed fields.

Would you provide functions that yield iterators that zip commonly used fields or would every user be responsible zipping what they need? Say, e.g. I'd implement a loop that needs positions and velocities, I'd zip them together?

@Luthaf
Copy link
Member Author

Luthaf commented Aug 29, 2017

Would you provide functions that yield iterators that zip commonly used fields or would every user be responsible zipping what they need? Say, e.g. I'd implement a loop that needs positions and velocities, I'd zip them together?

I think I'll go with the user zipping what they need for now. Having convenience methods can be interesting, but we need to pick which fields are available and which one are not. I am also a bit afraid of combinatorial explosion of methods here.

My ideal interface here would be something like this:

for (mass, position, velocity) in system.get((&Mass, &mut Position, &Velocity)) {
    position += mass * velocity / WHATEVER;
}

where we can easily specify what we want and how we need it. But making this syntax work with the borrow checker might be very hard, or even impossible: we need to prove to the compiler that system.get((&mut Position, &mut Position)) will never happen.

@Luthaf
Copy link
Member Author

Luthaf commented Aug 29, 2017

But making this syntax work with the borrow checker might be very hard, or even impossible: we need to prove to the compiler that system.get((&mut Position, &mut Position)) will never happen.

Actually, I might be able to work around this by generating the corresponding code (for all permutations of all combination of all fields with and without a mutable reference ^^) in soa-derive. I'll give it a look =)

@Luthaf
Copy link
Member Author

Luthaf commented Sep 6, 2017

Would you provide functions that yield iterators that zip commonly used fields or would every user be responsible zipping what they need? Say, e.g. I'd implement a loop that needs positions and velocities, I'd zip them together?

So I implemented this in soa-derive (see the zip branch), and the API is a bit better. See for example the corresponding test.

The strategy I took was to implement a given trait for all combination of 1, 2, 3, 4, 5, 6 and 7 fields, with all possible mut annotations. The main issue is the explosion of generated code, and thus of compile time.

Fields Generated code Compilation time
2 2000 loc 1.5s
3 6000 loc 2s
4 44 000 loc 9s
5 ? >2min

We could use this solution, but we need to pick which fields (4 maximum) are allowed in a zip. I think we need at least mass, position and velocity. This solution also does not yet support 'external data', i.e. adding an iterator from a vector not in the ParticleVec to the zip.


I also pushed a different solution, with a very convoluted macro (c8e60eb) that works a bit like the izip! macro. I am not really convinced by this solution, as it does still require to introduce new scopes to deal with borrowing issues. But it easily supports external data.


Here is a comparison of the solutions:

// current version

impl Control for RemoveRotation {
    fn control(&mut self, system: &mut System) {
        let com = system.center_of_mass();
        let mut moment = Vector3D::zero();
        let mut inertia = Matrix3::zero();
        {
            let masses = system.particles().mass;
            let positions = system.particles().position;
            let velocities = system.particles().velocity;

            for (&mass, position, velocity) in izip!(masses, positions, velocities) {
                let delta = position - com;
                moment += mass * (delta ^ velocity);
                inertia += - mass * delta.tensorial(&delta);
            }
        }

        let trace = inertia.trace();
        inertia[(0, 0)] += trace;
        inertia[(1, 1)] += trace;
        inertia[(2, 2)] += trace;

        let angular = inertia.inverse() * moment;
        let particles = system.particles_mut();
        let positions = &*particles.position;
        let velocities = particles.velocity;
        for (position, velocity) in izip!(positions, velocities) {
            *velocity -= (position - com) ^ angular;
        }
    }
}
// with particles_zip!

impl Control for RemoveRotation {
    fn control(&mut self, system: &mut System) {
        let com = system.center_of_mass();
        let mut moment = Vector3D::zero();
        let mut inertia = Matrix3::zero();
        {
            let particles = system.particles();
            for (&mass, position, velocity) in particles_zip!(particles, &Mass, &Position, &Velocity) {
                let delta = position - com;
                moment += mass * (delta ^ velocity);
                inertia += - mass * delta.tensorial(&delta);
            }
        }

        let trace = inertia.trace();
        inertia[(0, 0)] += trace;
        inertia[(1, 1)] += trace;
        inertia[(2, 2)] += trace;

        let angular = inertia.inverse() * moment;
        let particles = system.particles_mut();
        for (position, velocity) in particles_zip!(particles, &Position, &mut Velocity) {
            *velocity -= (position - com) ^ angular;
        }
    }
}
// with soa-derive zip

impl Control for RemoveRotation {
    fn control(&mut self, system: &mut System) {
        let com = system.center_of_mass();
        let mut moment = Vector3D::zero();
        let mut inertia = Matrix3::zero();
        for (&mass, position, velocity) in system.particles().zip(&Mass, &Position, &Velocity) {
            let delta = position - com;
            moment += mass * (delta ^ velocity);
            inertia += - mass * delta.tensorial(&delta);
       }

        let trace = inertia.trace();
        inertia[(0, 0)] += trace;
        inertia[(1, 1)] += trace;
        inertia[(2, 2)] += trace;

        let angular = inertia.inverse() * moment;
        for (position, velocity) in  system.particles_mut().zip_mut(&Position, &mut Velocity) {
            *velocity -= (position - com) ^ angular;
        }
    }
}

What do you think of all this ?

@Luthaf
Copy link
Member Author

Luthaf commented Sep 7, 2017

(travis failure is due to https://github.com/azerupi/mdBook/issues/416, and us not having done #193 yet 😄)

@g-bauer
Copy link
Contributor

g-bauer commented Sep 9, 2017

Looking at the APIs, the SoA-derive feels like the cleanest option but the implementation is an issue. But I could also live with the current implementation even though we need to write a bit more code (and the &* part is ugly). There is always the option to use the current implementation (in conjunction with SoA-deriven) when more than 4 items are needed, right?

What do you prefer?

Guillaume Fraux added 5 commits September 18, 2017 14:31
There is no need to have getter and setter if they are not enforcing an invariant
The `Alternator` code is tested in the related file
The izip! macro will be useful
This uses the soa_derive crate to automatically derive all the needed
methods from the struct definition.
@Luthaf Luthaf changed the title [WIP] Switch particle storage to struct of array Switch particle storage to struct of array Sep 18, 2017
@Luthaf
Copy link
Member Author

Luthaf commented Sep 18, 2017

Looking at the APIs, the SoA-derive feels like the cleanest option but the implementation is an issue. But I could also live with the current implementation even though we need to write a bit more code (and the &* part is ugly). There is always the option to use the current implementation (in conjunction with SoA-deriven) when more than 4 items are needed, right?

What do you prefer?

Sorry, I though I answered that. I prefer the soa_derive zip function, so I implemented the missing bits in the 0.4 release of the crate. This PR should be ready now !

Let's check Travis and run some benchmarks.

@Luthaf
Copy link
Member Author

Luthaf commented Sep 19, 2017

Comparing to master ()

using --threshold 2, latest commit first

ddae811 Switch the particle storage to struct of arrays

 name                                        .txt ns/iter              ddae811d.txt ns/iter      diff ns/iter   diff %  speedup 
 argon::cache_move_particle                  354,829 (+/- 4264)        367,438 (+/- 4917)              12,609    3.55%   x 0.97 
 argon::energy                               298,992 (+/- 25064)       288,445 (+/- 17467)            -10,547   -3.53%   x 1.04 
 nacl::cache_move_particle_wolf              94,530 (+/- 119583)       91,542 (+/- 118946)             -2,988   -3.16%   x 1.03 
 nacl::energy_wolf                           92,424 (+/- 8407)         102,441 (+/- 3418)              10,017   10.84%   x 0.90 
 nacl::virial_ewald                          8,315,287 (+/- 1716617)   8,131,541 (+/- 2162340)       -183,746   -2.21%   x 1.02 
 nacl::virial_wolf                           109,742 (+/- 9644)        113,114 (+/- 11776)              3,372    3.07%   x 0.97 
 propane::cache_move_particles               462,847 (+/- 4746)        428,097 (+/- 5757)             -34,750   -7.51%   x 1.08 
 water::cache_move_all_rigid_molecules_wolf  9,662,817 (+/- 7264180)   10,771,353 (+/- 5145624)     1,108,536   11.47%   x 0.90 
 water::cache_move_particles_wolf            621,728 (+/- 299477)      424,201 (+/- 86380)           -197,527  -31.77%   x 1.47 
 water::virial_ewald                         12,012,884 (+/- 2539845)  13,500,396 (+/- 2111133)     1,487,512   12.38%   x 0.89 


f62e90a Add an explicit dependency on itertools

 name                                        .txt ns/iter              f62e90a8.txt ns/iter      diff ns/iter   diff %  speedup 
 argon::energy                               298,992 (+/- 25064)       291,905 (+/- 33549)             -7,087   -2.37%   x 1.02 
 nacl::cache_move_particle_wolf              94,530 (+/- 119583)       90,641 (+/- 21128)              -3,889   -4.11%   x 1.04 
 nacl::energy_wolf                           92,424 (+/- 8407)         86,575 (+/- 1719)               -5,849   -6.33%   x 1.07 
 nacl::virial_ewald                          8,315,287 (+/- 1716617)   8,066,196 (+/- 2132177)       -249,091   -3.00%   x 1.03 
 nacl::virial_wolf                           109,742 (+/- 9644)        120,207 (+/- 1811)              10,465    9.54%   x 0.91 
 water::cache_move_all_rigid_molecules_wolf  9,662,817 (+/- 7264180)   7,656,349 (+/- 5564389)     -2,006,468  -20.76%   x 1.26 
 water::cache_move_particles_wolf            621,728 (+/- 299477)      589,038 (+/- 258589)           -32,690   -5.26%   x 1.06 
 water::energy_ewald                         1,292,118 (+/- 132429)    3,038,714 (+/- 1747773)      1,746,596  135.17%   x 0.43 
 water::virial_ewald                         12,012,884 (+/- 2539845)  13,049,924 (+/- 2679815)     1,037,040    8.63%   x 0.92 
 water::virial_wolf                          162,176 (+/- 2857)        151,251 (+/- 15454)            -10,925   -6.74%   x 1.07 


ceaaf17 Only test control in controls unit tests

 name                              .txt ns/iter              ceaaf17a.txt ns/iter      diff ns/iter  diff %  speedup 
 argon::cache_move_particle        354,829 (+/- 4264)        365,509 (+/- 12248)             10,680   3.01%   x 0.97 
 argon::energy                     298,992 (+/- 25064)       288,310 (+/- 5561)             -10,682  -3.57%   x 1.04 
 nacl::cache_move_particle_wolf    94,530 (+/- 119583)       90,461 (+/- 7157)               -4,069  -4.30%   x 1.04 
 nacl::energy_wolf                 92,424 (+/- 8407)         88,482 (+/- 6585)               -3,942  -4.27%   x 1.04 
 nacl::virial_wolf                 109,742 (+/- 9644)        121,305 (+/- 22574)             11,563  10.54%   x 0.90 
 water::cache_move_particles_wolf  621,728 (+/- 299477)      731,623 (+/- 380783)           109,895  17.68%   x 0.85 
 water::virial_ewald               12,012,884 (+/- 2539845)  13,665,800 (+/- 2625751)     1,652,916  13.76%   x 0.88 


3a0ba57 Implement XxxAssign operators for Complex

 name                                        .txt ns/iter              3a0ba573.txt ns/iter      diff ns/iter   diff %  speedup 
 argon::energy                               298,992 (+/- 25064)       273,658 (+/- 25912)            -25,334   -8.47%   x 1.09 
 nacl::cache_move_particle_wolf              94,530 (+/- 119583)       89,335 (+/- 7490)               -5,195   -5.50%   x 1.06 
 nacl::virial_ewald                          8,315,287 (+/- 1716617)   8,617,827 (+/- 2431884)        302,540    3.64%   x 0.96 
 nacl::virial_wolf                           109,742 (+/- 9644)        122,704 (+/- 45964)             12,962   11.81%   x 0.89 
 water::cache_move_all_rigid_molecules_wolf  9,662,817 (+/- 7264180)   8,440,412 (+/- 7441354)     -1,222,405  -12.65%   x 1.14 
 water::cache_move_particles_wolf            621,728 (+/- 299477)      388,350 (+/- 29642)           -233,378  -37.54%   x 1.60 
 water::virial_ewald                         12,012,884 (+/- 2539845)  13,593,811 (+/- 2455071)     1,580,927   13.16%   x 0.88 


8e92ae5 Make Particle::name public

 name                                        .txt ns/iter              8e92ae56.txt ns/iter      diff ns/iter   diff %  speedup 
 argon::cache_move_particle                  354,829 (+/- 4264)        365,394 (+/- 15389)             10,565    2.98%   x 0.97 
 argon::energy                               298,992 (+/- 25064)       290,505 (+/- 8332)              -8,487   -2.84%   x 1.03 
 argon::virial                               354,986 (+/- 23800)       331,914 (+/- 45790)            -23,072   -6.50%   x 1.07 
 nacl::cache_move_particle_wolf              94,530 (+/- 119583)       88,871 (+/- 4382)               -5,659   -5.99%   x 1.06 
 nacl::virial_ewald                          8,315,287 (+/- 1716617)   8,007,878 (+/- 1883087)       -307,409   -3.70%   x 1.04 
 water::cache_move_all_rigid_molecules_wolf  9,662,817 (+/- 7264180)   8,516,182 (+/- 6693782)     -1,146,635  -11.87%   x 1.13 
 water::cache_move_particles_wolf            621,728 (+/- 299477)      435,408 (+/- 96376)           -186,320  -29.97%   x 1.43 
 water::virial_ewald                         12,012,884 (+/- 2539845)  12,578,293 (+/- 2677974)       565,409    4.71%   x 0.96 


bbecbcc More warning fixes

 name                                        .txt ns/iter              bbecbccf.txt ns/iter      diff ns/iter  diff %  speedup 
 nacl::cache_move_particle_wolf              94,530 (+/- 119583)       89,467 (+/- 8470)               -5,063  -5.36%   x 1.06 
 nacl::virial_ewald                          8,315,287 (+/- 1716617)   7,992,590 (+/- 2010687)       -322,697  -3.88%   x 1.04 
 nacl::virial_wolf                           109,742 (+/- 9644)        102,578 (+/- 18642)             -7,164  -6.53%   x 1.07 
 water::cache_move_all_rigid_molecules_wolf  9,662,817 (+/- 7264180)   9,215,829 (+/- 6561096)       -446,988  -4.63%   x 1.05 
 water::cache_move_particles_ewald           643,034 (+/- 32994)       664,245 (+/- 45477)             21,211   3.30%   x 0.97 
 water::cache_move_particles_wolf            621,728 (+/- 299477)      723,156 (+/- 566242)           101,428  16.31%   x 0.86 
 water::virial_ewald                         12,012,884 (+/- 2539845)  13,772,206 (+/- 2996449)     1,759,322  14.65%   x 0.87 


Individual benchmarks

ddae811 Switch the particle storage to struct of arrays

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     367,438 ns/iter (+/- 4,917)
test argon::energy              ... bench:     288,445 ns/iter (+/- 17,467)
test argon::forces              ... bench:     486,827 ns/iter (+/- 8,290)
test argon::virial              ... bench:     352,949 ns/iter (+/- 63,569)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     286,947 ns/iter (+/- 2,523)
test nacl::cache_move_particle_wolf  ... bench:      91,542 ns/iter (+/- 118,946)
test nacl::energy_ewald              ... bench:     753,181 ns/iter (+/- 5,413)
test nacl::energy_wolf               ... bench:     102,441 ns/iter (+/- 3,418)
test nacl::forces_ewald              ... bench:  19,833,408 ns/iter (+/- 136,886)
test nacl::forces_wolf               ... bench:     232,356 ns/iter (+/- 6,142)
test nacl::virial_ewald              ... bench:   8,131,541 ns/iter (+/- 2,162,340)
test nacl::virial_wolf               ... bench:     113,114 ns/iter (+/- 11,776)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,631,436 ns/iter (+/- 23,084)
test propane::cache_move_particles           ... bench:     428,097 ns/iter (+/- 5,757)
test propane::energy                         ... bench:     811,071 ns/iter (+/- 38,685)
test propane::forces                         ... bench:   1,154,272 ns/iter (+/- 68,755)
test propane::virial                         ... bench:     434,600 ns/iter (+/- 17,580)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,033,298 ns/iter (+/- 752,905)
test water::cache_move_all_rigid_molecules_wolf  ... bench:  10,771,353 ns/iter (+/- 5,145,624)
test water::cache_move_particles_ewald           ... bench:     646,800 ns/iter (+/- 35,644)
test water::cache_move_particles_wolf            ... bench:     424,201 ns/iter (+/- 86,380)
test water::energy_ewald                         ... bench:   1,277,137 ns/iter (+/- 15,186)
test water::energy_wolf                          ... bench:     130,557 ns/iter (+/- 3,902)
test water::forces_ewald                         ... bench:  26,640,074 ns/iter (+/- 415,997)
test water::forces_wolf                          ... bench:     283,713 ns/iter (+/- 4,917)
test water::virial_ewald                         ... bench:  13,500,396 ns/iter (+/- 2,111,133)
test water::virial_wolf                          ... bench:     162,663 ns/iter (+/- 1,715)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured



f62e90a Add an explicit dependency on itertools

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     355,755 ns/iter (+/- 7,246)
test argon::energy              ... bench:     291,905 ns/iter (+/- 33,549)
test argon::forces              ... bench:     496,406 ns/iter (+/- 33,143)
test argon::virial              ... bench:     354,934 ns/iter (+/- 36,080)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     292,594 ns/iter (+/- 2,144)
test nacl::cache_move_particle_wolf  ... bench:      90,641 ns/iter (+/- 21,128)
test nacl::energy_ewald              ... bench:     753,274 ns/iter (+/- 4,262)
test nacl::energy_wolf               ... bench:      86,575 ns/iter (+/- 1,719)
test nacl::forces_ewald              ... bench:  19,707,983 ns/iter (+/- 117,186)
test nacl::forces_wolf               ... bench:     233,836 ns/iter (+/- 3,452)
test nacl::virial_ewald              ... bench:   8,066,196 ns/iter (+/- 2,132,177)
test nacl::virial_wolf               ... bench:     120,207 ns/iter (+/- 1,811)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,651,927 ns/iter (+/- 13,349)
test propane::cache_move_particles           ... bench:     461,878 ns/iter (+/- 4,013)
test propane::energy                         ... bench:     807,796 ns/iter (+/- 20,827)
test propane::forces                         ... bench:   1,174,780 ns/iter (+/- 56,430)
test propane::virial                         ... bench:     434,345 ns/iter (+/- 36,832)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,021,512 ns/iter (+/- 65,862)
test water::cache_move_all_rigid_molecules_wolf  ... bench:   7,656,349 ns/iter (+/- 5,564,389)
test water::cache_move_particles_ewald           ... bench:     651,733 ns/iter (+/- 42,889)
test water::cache_move_particles_wolf            ... bench:     589,038 ns/iter (+/- 258,589)
test water::energy_ewald                         ... bench:   3,038,714 ns/iter (+/- 1,747,773)
test water::energy_wolf                          ... bench:     131,166 ns/iter (+/- 30,091)
test water::forces_ewald                         ... bench:  26,474,532 ns/iter (+/- 641,494)
test water::forces_wolf                          ... bench:     283,267 ns/iter (+/- 5,688)
test water::virial_ewald                         ... bench:  13,049,924 ns/iter (+/- 2,679,815)
test water::virial_wolf                          ... bench:     151,251 ns/iter (+/- 15,454)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured



ceaaf17 Only test control in controls unit tests

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     365,509 ns/iter (+/- 12,248)
test argon::energy              ... bench:     288,310 ns/iter (+/- 5,561)
test argon::forces              ... bench:     489,540 ns/iter (+/- 52,380)
test argon::virial              ... bench:     354,530 ns/iter (+/- 30,870)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     292,435 ns/iter (+/- 2,097)
test nacl::cache_move_particle_wolf  ... bench:      90,461 ns/iter (+/- 7,157)
test nacl::energy_ewald              ... bench:     752,368 ns/iter (+/- 8,824)
test nacl::energy_wolf               ... bench:      88,482 ns/iter (+/- 6,585)
test nacl::forces_ewald              ... bench:  19,710,197 ns/iter (+/- 109,878)
test nacl::forces_wolf               ... bench:     232,517 ns/iter (+/- 2,994)
test nacl::virial_ewald              ... bench:   8,190,099 ns/iter (+/- 1,603,839)
test nacl::virial_wolf               ... bench:     121,305 ns/iter (+/- 22,574)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,650,657 ns/iter (+/- 6,699)
test propane::cache_move_particles           ... bench:     460,538 ns/iter (+/- 5,813)
test propane::energy                         ... bench:     810,931 ns/iter (+/- 63,504)
test propane::forces                         ... bench:   1,181,854 ns/iter (+/- 72,554)
test propane::virial                         ... bench:     433,471 ns/iter (+/- 10,660)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,022,486 ns/iter (+/- 49,339)
test water::cache_move_all_rigid_molecules_wolf  ... bench:   9,581,275 ns/iter (+/- 6,340,907)
test water::cache_move_particles_ewald           ... bench:     653,222 ns/iter (+/- 32,995)
test water::cache_move_particles_wolf            ... bench:     731,623 ns/iter (+/- 380,783)
test water::energy_ewald                         ... bench:   1,292,130 ns/iter (+/- 7,503)
test water::energy_wolf                          ... bench:     130,757 ns/iter (+/- 3,661)
test water::forces_ewald                         ... bench:  26,492,568 ns/iter (+/- 198,111)
test water::forces_wolf                          ... bench:     285,751 ns/iter (+/- 178,509)
test water::virial_ewald                         ... bench:  13,665,800 ns/iter (+/- 2,625,751)
test water::virial_wolf                          ... bench:     162,395 ns/iter (+/- 1,571)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured



3a0ba57 Implement XxxAssign operators for Complex

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     352,307 ns/iter (+/- 5,957)
test argon::energy              ... bench:     273,658 ns/iter (+/- 25,912)
test argon::forces              ... bench:     492,495 ns/iter (+/- 53,803)
test argon::virial              ... bench:     350,310 ns/iter (+/- 7,324)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     292,359 ns/iter (+/- 1,459)
test nacl::cache_move_particle_wolf  ... bench:      89,335 ns/iter (+/- 7,490)
test nacl::energy_ewald              ... bench:     752,521 ns/iter (+/- 5,490)
test nacl::energy_wolf               ... bench:      92,727 ns/iter (+/- 8,707)
test nacl::forces_ewald              ... bench:  19,718,349 ns/iter (+/- 257,483)
test nacl::forces_wolf               ... bench:     232,484 ns/iter (+/- 3,731)
test nacl::virial_ewald              ... bench:   8,617,827 ns/iter (+/- 2,431,884)
test nacl::virial_wolf               ... bench:     122,704 ns/iter (+/- 45,964)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,650,354 ns/iter (+/- 12,964)
test propane::cache_move_particles           ... bench:     460,807 ns/iter (+/- 4,304)
test propane::energy                         ... bench:     818,578 ns/iter (+/- 13,375)
test propane::forces                         ... bench:   1,165,934 ns/iter (+/- 70,580)
test propane::virial                         ... bench:     435,175 ns/iter (+/- 11,749)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,023,303 ns/iter (+/- 72,095)
test water::cache_move_all_rigid_molecules_wolf  ... bench:   8,440,412 ns/iter (+/- 7,441,354)
test water::cache_move_particles_ewald           ... bench:     654,515 ns/iter (+/- 19,616)
test water::cache_move_particles_wolf            ... bench:     388,350 ns/iter (+/- 29,642)
test water::energy_ewald                         ... bench:   1,291,802 ns/iter (+/- 8,210)
test water::energy_wolf                          ... bench:     132,346 ns/iter (+/- 11,142)
test water::forces_ewald                         ... bench:  26,474,894 ns/iter (+/- 148,033)
test water::forces_wolf                          ... bench:     282,849 ns/iter (+/- 29,313)
test water::virial_ewald                         ... bench:  13,593,811 ns/iter (+/- 2,455,071)
test water::virial_wolf                          ... bench:     162,994 ns/iter (+/- 34,517)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured



8e92ae5 Make Particle::name public

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     365,394 ns/iter (+/- 15,389)
test argon::energy              ... bench:     290,505 ns/iter (+/- 8,332)
test argon::forces              ... bench:     491,462 ns/iter (+/- 8,169)
test argon::virial              ... bench:     331,914 ns/iter (+/- 45,790)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     292,879 ns/iter (+/- 3,007)
test nacl::cache_move_particle_wolf  ... bench:      88,871 ns/iter (+/- 4,382)
test nacl::energy_ewald              ... bench:     752,423 ns/iter (+/- 5,824)
test nacl::energy_wolf               ... bench:      94,129 ns/iter (+/- 3,556)
test nacl::forces_ewald              ... bench:  19,710,033 ns/iter (+/- 339,744)
test nacl::forces_wolf               ... bench:     235,989 ns/iter (+/- 19,887)
test nacl::virial_ewald              ... bench:   8,007,878 ns/iter (+/- 1,883,087)
test nacl::virial_wolf               ... bench:     110,473 ns/iter (+/- 9,583)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,655,184 ns/iter (+/- 51,491)
test propane::cache_move_particles           ... bench:     462,868 ns/iter (+/- 5,826)
test propane::energy                         ... bench:     812,004 ns/iter (+/- 18,580)
test propane::forces                         ... bench:   1,181,257 ns/iter (+/- 82,243)
test propane::virial                         ... bench:     441,117 ns/iter (+/- 136,669)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,019,926 ns/iter (+/- 25,993)
test water::cache_move_all_rigid_molecules_wolf  ... bench:   8,516,182 ns/iter (+/- 6,693,782)
test water::cache_move_particles_ewald           ... bench:     653,222 ns/iter (+/- 37,403)
test water::cache_move_particles_wolf            ... bench:     435,408 ns/iter (+/- 96,376)
test water::energy_ewald                         ... bench:   1,292,020 ns/iter (+/- 14,330)
test water::energy_wolf                          ... bench:     131,346 ns/iter (+/- 6,517)
test water::forces_ewald                         ... bench:  26,475,416 ns/iter (+/- 137,135)
test water::forces_wolf                          ... bench:     281,017 ns/iter (+/- 7,302)
test water::virial_ewald                         ... bench:  12,578,293 ns/iter (+/- 2,677,974)
test water::virial_wolf                          ... bench:     162,966 ns/iter (+/- 3,207)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured



bbecbcc More warning fixes

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     354,066 ns/iter (+/- 3,740)
test argon::energy              ... bench:     295,121 ns/iter (+/- 33,354)
test argon::forces              ... bench:     490,970 ns/iter (+/- 5,761)
test argon::virial              ... bench:     356,582 ns/iter (+/- 89,253)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     292,595 ns/iter (+/- 2,447)
test nacl::cache_move_particle_wolf  ... bench:      89,467 ns/iter (+/- 8,470)
test nacl::energy_ewald              ... bench:     751,981 ns/iter (+/- 4,304)
test nacl::energy_wolf               ... bench:      92,182 ns/iter (+/- 16,671)
test nacl::forces_ewald              ... bench:  19,713,913 ns/iter (+/- 359,656)
test nacl::forces_wolf               ... bench:     233,041 ns/iter (+/- 3,414)
test nacl::virial_ewald              ... bench:   7,992,590 ns/iter (+/- 2,010,687)
test nacl::virial_wolf               ... bench:     102,578 ns/iter (+/- 18,642)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,653,461 ns/iter (+/- 7,408)
test propane::cache_move_particles           ... bench:     462,897 ns/iter (+/- 9,742)
test propane::energy                         ... bench:     822,915 ns/iter (+/- 52,048)
test propane::forces                         ... bench:   1,157,835 ns/iter (+/- 83,143)
test propane::virial                         ... bench:     434,512 ns/iter (+/- 11,048)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,036,379 ns/iter (+/- 751,510)
test water::cache_move_all_rigid_molecules_wolf  ... bench:   9,215,829 ns/iter (+/- 6,561,096)
test water::cache_move_particles_ewald           ... bench:     664,245 ns/iter (+/- 45,477)
test water::cache_move_particles_wolf            ... bench:     723,156 ns/iter (+/- 566,242)
test water::energy_ewald                         ... bench:   1,291,979 ns/iter (+/- 12,113)
test water::energy_wolf                          ... bench:     130,688 ns/iter (+/- 6,559)
test water::forces_ewald                         ... bench:  26,513,173 ns/iter (+/- 201,910)
test water::forces_wolf                          ... bench:     283,317 ns/iter (+/- 4,529)
test water::virial_ewald                         ... bench:  13,772,206 ns/iter (+/- 2,996,449)
test water::virial_wolf                          ... bench:     163,377 ns/iter (+/- 15,300)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured



running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out


running 4 tests
test argon::cache_move_particle ... bench:     354,829 ns/iter (+/- 4,264)
test argon::energy              ... bench:     298,992 ns/iter (+/- 25,064)
test argon::forces              ... bench:     491,932 ns/iter (+/- 8,903)
test argon::virial              ... bench:     354,986 ns/iter (+/- 23,800)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured


running 8 tests
test nacl::cache_move_particle_ewald ... bench:     292,761 ns/iter (+/- 2,801)
test nacl::cache_move_particle_wolf  ... bench:      94,530 ns/iter (+/- 119,583)
test nacl::energy_ewald              ... bench:     751,782 ns/iter (+/- 4,145)
test nacl::energy_wolf               ... bench:      92,424 ns/iter (+/- 8,407)
test nacl::forces_ewald              ... bench:  19,701,067 ns/iter (+/- 371,803)
test nacl::forces_wolf               ... bench:     233,726 ns/iter (+/- 3,870)
test nacl::virial_ewald              ... bench:   8,315,287 ns/iter (+/- 1,716,617)
test nacl::virial_wolf               ... bench:     109,742 ns/iter (+/- 9,644)

test result: ok. 0 passed; 0 failed; 0 ignored; 8 measured


running 5 tests
test propane::cache_move_all_rigid_molecules ... bench:   1,653,836 ns/iter (+/- 1,657,163)
test propane::cache_move_particles           ... bench:     462,847 ns/iter (+/- 4,746)
test propane::energy                         ... bench:     821,331 ns/iter (+/- 17,587)
test propane::forces                         ... bench:   1,164,685 ns/iter (+/- 71,668)
test propane::virial                         ... bench:     432,908 ns/iter (+/- 8,886)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured


running 10 tests
test water::cache_move_all_rigid_molecules_ewald ... bench:   6,041,672 ns/iter (+/- 72,893)
test water::cache_move_all_rigid_molecules_wolf  ... bench:   9,662,817 ns/iter (+/- 7,264,180)
test water::cache_move_particles_ewald           ... bench:     643,034 ns/iter (+/- 32,994)
test water::cache_move_particles_wolf            ... bench:     621,728 ns/iter (+/- 299,477)
test water::energy_ewald                         ... bench:   1,292,118 ns/iter (+/- 132,429)
test water::energy_wolf                          ... bench:     130,115 ns/iter (+/- 7,503)
test water::forces_ewald                         ... bench:  26,485,075 ns/iter (+/- 318,619)
test water::forces_wolf                          ... bench:     281,810 ns/iter (+/- 44,562)
test water::virial_ewald                         ... bench:  12,012,884 ns/iter (+/- 2,539,845)
test water::virial_wolf                          ... bench:     162,176 ns/iter (+/- 2,857)

test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured




CPU: Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz

@Luthaf
Copy link
Member Author

Luthaf commented Sep 22, 2017

If no one disagree, I'll merge this tomorrow =)

@Luthaf Luthaf merged commit beb6d02 into master Sep 23, 2017
@Luthaf Luthaf deleted the soa branch September 23, 2017 13:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants