September 03, 2017
On Saturday, 2 September 2017 at 17:00:46 UTC, Joakim wrote:
> On Saturday, 2 September 2017 at 15:41:54 UTC, Joakim wrote:
>> D:
>> https://bitbucket.org/qznc/d-shootout/raw/898f7f3b3c5d55680229113e973ef95ece6f711a/progs/nbody/nbody.d
>>
>> ldc 1.4 beta1, llvm 4.0.1
>>
>> ldc2 -O3 nbody.d
>>
>> The D version averages 2.5 seconds, the C++ version 6 seconds, which means D would likely still be at the top of that n-body ranking today.
>
> Sorry, I assumed the D version worked fine and didn't bother to check the output, turns out it needs two foreach loops changed in advance(dt).  Specifically, "Body i" should be changed to "ref Body i" in both foreach statements, so the data is actually updated. ;)
>
> After that change, the C++ version wins by a little, 6 seconds vs. 6.5 seconds for the D translation.  I see that the C++ version directly invokes SIMD intrinsics, so perhaps that's to be expected.

What needs to be adjusted for optimization? If you let me know it I adjust it here https://github.com/fkromer/exploringBB/blob/nbody/chp05/performance/nbody.d and/or https://github.com/fkromer/exploringBB/blob/nbody/chp05/performance/build and/or https://github.com/fkromer/exploringBB/blob/nbody/chp05/performance/run#L25
September 03, 2017
On Sunday, 3 September 2017 at 17:56:26 UTC, thinwybk wrote:
> On Saturday, 2 September 2017 at 17:00:46 UTC, Joakim wrote:
>> On Saturday, 2 September 2017 at 15:41:54 UTC, Joakim wrote:
>>> D:
>>> https://bitbucket.org/qznc/d-shootout/raw/898f7f3b3c5d55680229113e973ef95ece6f711a/progs/nbody/nbody.d
>>>
>>> ldc 1.4 beta1, llvm 4.0.1
>>>
>>> ldc2 -O3 nbody.d
>>>
>>> The D version averages 2.5 seconds, the C++ version 6 seconds, which means D would likely still be at the top of that n-body ranking today.
>>
>> Sorry, I assumed the D version worked fine and didn't bother to check the output, turns out it needs two foreach loops changed in advance(dt).  Specifically, "Body i" should be changed to "ref Body i" in both foreach statements, so the data is actually updated. ;)
>>
>> After that change, the C++ version wins by a little, 6 seconds vs. 6.5 seconds for the D translation.  I see that the C++ version directly invokes SIMD intrinsics, so perhaps that's to be expected.
>
> What needs to be adjusted for optimization? If you let me know it I adjust it here https://github.com/fkromer/exploringBB/blob/nbody/chp05/performance/nbody.d and/or https://github.com/fkromer/exploringBB/blob/nbody/chp05/performance/build and/or https://github.com/fkromer/exploringBB/blob/nbody/chp05/performance/run#L25

It's not optimization, right now it's subtly incorrect, because a struct passed into a foreach loop is copied.  Add a "ref" to "Body i" when initializing each foreach loop in advance() to remedy that, so that it produces the same output as the C++ version for the same input.
1 2 3 4 5 6 7 8
Next ›   Last »