D for scientific computing

John Colvin john.loughran.colvin at gmail.com
Fri Jan 25 08:50:21 PST 2013


On Friday, 25 January 2013 at 16:09:00 UTC, H. S. Teoh wrote:
> On Fri, Jan 25, 2013 at 04:09:25PM +0100, John Colvin wrote:
>> On Friday, 25 January 2013 at 13:38:03 UTC, Iain Buclaw wrote:
>> >On 25 January 2013 10:27, John Colvin
>> ><john.loughran.colvin at gmail.com>wrote:
>> >
> [...]
>> >>Comparing dmd -O and gdc -O3 is hardly fair. "dmd -release
>> >>-inline -O" is more comparable.
>> >>
>> >
>> >
>> >But then you'd have to do gdc -O3 -frelease. :-)
>> 
>> Ah yes, of course :)
>
> Hmm. I didn't realize that dmd has a separate switch for 
> function
> inlining. Well, here's the updated numbers:
>
>
>> >>On Friday, 25 January 2013 at 01:41:12 UTC, H. S. Teoh wrote:
>> >>>Both reals and floats. Well, let's get some real 
>> >>>measurements.
>> >>>Here's a quick run-through of various test programs I have 
>> >>>lying
>> >>>around:
>> >>>
>> >>>Test program #1 (iterating 2-variable function over grid),
>> >>>uses reals:
>> >>>- Test case with n=400:
>> >>>        Using DMD:      ~8 seconds (consistently)
>> >>>        Using GDC:      ~6 seconds (consistently)
>> >>>        * So the DMD version is 33% slower than the GDC
>> >>>version.
>> >>>          (That is, 8/6*100 = 133%, so 33% slower.)
>
> Updated: DMD version with -inline takes ~7 seconds 
> consistently, so we
> have 7/6*100 = 116%, so 16% slower.
>
>
>> >>>- Test case with n=600:
>> >>>        Using DMD:      ~27 seconds (consistently)
>> >>>        Using GDC:      ~19 seconds (consistently)
>> >>>        * So the DMD version is 42% slower than the GDC
>> >>>version.
>
> Updated: DMD version with -inline takes ~24 seconds 
> consistently, so 26%
> slower.
>
>
>> >>>Test program #2 (terrain generation simulator), uses floats:
>> >>>(The running time of this one depends on the RNG, so I fixed
>> >>>the seed
>> >>>value in order to make a fair comparison.)
>> >>>- Test case with seed=380170304, n=20 with water & wind
>> >>>simulation:
>> >>>        Using DMD:      ~10 seconds (consistently)
>> >>>        Using GDC:      ~7 seconds (consistently)
>> >>>        * So the DMD version is 42% slower than the GDC
>> >>>version.
>
> Updated: DMD version with -inline takes ~8 seconds 
> consistently, so 14%
> slower.
>
>
>> >>>- Test case with seed=380170304, n=25 with water & wind
>> >>>simulation:
>> >>>        Using DMD:      ~14 seconds (consistently)
>> >>>        Using GDC:      ~9 seconds (consistently)
>> >>>        * So the DMD version is 55% slower than the GDC
>> >>>version.
>
> Updated: DMD version with -inline takes ~11 seconds 
> consistently, so
> 22% slower.
>
>
>> >>>Test program #3 (enumeration of coordinates of n-dimensional
>> >>>polytopes),
>> >>>uses reals:
>> >>>- All permutations and changes of sign of <1,2,3,4,5,6,7>:
>> >>>        Using DMD:      ~4 seconds (consistently)
>> >>>        Using GDC:      ~3 seconds (consistently)
>> >>>        * So the DMD version is 33% slower than the GDC
>> >>>version.
>
> Updated: DMD version with -inline still takes ~4 seconds, so no
> significant change here.
>
>
>> >>>- All permutations and changes of sign of <1,2,3,4,5,6,7,7>:
>> >>>        Using DMD:      ~41 seconds (consistently)
>> >>>        Using GDC:      ~27 seconds (consistently)
>> >>>        * So the DMD version is 51% slower than the GDC
>> >>>version.
>
> Updated: DMD version with -inline takes about 36 seconds on 
> average, so
> about 33% slower.
>
>
>> >>>- Even permutations and all changes of sign of
>> >>><1,2,3,4,5,6,7,8>:
>> >>>        Using DMD:      ~40 seconds (consistently)
>> >>>        Using GDC:      ~27 seconds (consistently)
>> >>>        * So the DMD version is 48% slower than the GDC
>> >>>version.
>
> Updated: DMD version with -inline takes about 38 seconds, so 
> 41% slower.
>
> Conclusions:
> - The performance gap is smaller than previously thought, but 
> it's still
>   present.
> - I will be using -inline with dmd aggressively.
> - What other dmd options am I missing that will bring dmd on 
> par with
>   gdc -O3 (if there are any)?
>
>
> T

I have sometimes found that using -release and -noboundscheck 
made a bigger difference to dmd than to gdc. The corresponding 
gdc options are -frelease and -fno-bounds-check

Comparing performance without -release isn't that meaningful.


More information about the Digitalmars-d mailing list