On Monday, 5 March 2018 at 09:48:49 UTC, Uknown wrote:
Depending on your platform, the size of `double` could be
different between C++ and D. Could you check that the size and
precision are indeed the same?
Also, benchmark method is just as important as benchmark code.
Did you use DMD or LDC as the D compiler? In this case it
shouldn't matter, but try with LDC if you haven't. Also ensure
that you've used the right flags:
`-release -inline -O`.
If the D version is still slower, you could try using the C
version of the function
Simply change `import std.math: atan;` to `core.stdc.math:
atan;` [0]
[0]: https://dlang.org/phobos/core_stdc_math.html#.atan
Thanks all for the info.
I've tested these two very basic representative codes:
https://www.dropbox.com/s/b5o4i8h43qh1saf/test.cc?dl=0
https://www.dropbox.com/s/zsaikhdoyun3olk/test.d?dl=0
Results:
C++:
g++ (Apple LLVM version 7.3.0): 9.5 secs
g++ (GCC 7.1.0): 10.7 secs
D:
dmd : 35.5 secs
dmd -release -inline -O : 29.5 secs
ldc2 : 34.4 secs
ldc2 -release -O : 31.5 secs
But now: using the core.stdc.math atan as per Uknown's suggestion:
D:
dmd: 9 secs
dmd -release -inline -O : 6.8 secs
ldc2 : 10 secs
ldc2 -release -O : 6.5 secs <- best
So indeed the difference is between the `std.math atan` versus
the `core.stdc.math atan`. Thanks Uknown! Just knowing this trick
could make the difference between me and other scientists
switching over to D...
But now comes the question: can the D fundamental maths functions
be propped up to be as fast as the C ones?