D for scientific computing

H. S. Teoh hsteoh at quickfur.ath.cx
Fri Jan 25 08:07:04 PST 2013


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

-- 
Written on the window of a clothing store: No shirt, no shoes, no service.


More information about the Digitalmars-d mailing list