On 10/20/2016 10:02 PM, Larry Evans wrote:
On 10/19/2016 11:59 PM, Michael Marcin wrote:
On 10/19/2016 7:32 AM, Larry Evans wrote:
Michael, the attached is an outline of how to do it. As noted in the comments, a lot of member functions still need implementation; however, the offset calculations I think are correct.
Code has been updated to implement most of the "essentials" of soa_block. You can now call begin<Index> to get the begin iterator for the Index'th vector.
The code now is on github at:
Still digesting this but one small tidbit I stood out for me
[snip] I uploaded a modification of your benchmark:
to: https://github.com/cppljevans/soa/blob/master/codepad.eol6auRN.cpp
The modification added soa_emitter_block_t which uses soa_block. Unfortunately, this soa_emitter_block_t takes about twice as long as your soa_emitter_static_t.
I've no idea why. Any guesses?
2x is quite an abstraction penalty. I can only assume your compiler is failing to optimize away some part of the abstraction. FWIW on vs2015 I'm not seeing nearly as much of a difference. particle_count=1,000,000 AoS in 6.34667 seconds SoA in 4.26384 seconds SoA flat in 4.16572 seconds SoA Static in 5.4037 seconds SoA block in 5.5588 seconds