www.digitalmars.com         C & C++   DMDScript  

D - Is the current D slow or Java fast ?

reply "Mike Wynn" <mike.wynn l8night.co.uk> writes:
I've been testing some crypto code, basic port of some Java crypto to D
(the C versions are all macro'ed).

and I got some disturbing results

PC used Athlon 1G33, 512Mb 266 DDR

java version "1.4.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_03-b04)
Java HotSpot(TM) Client VM (build 1.4.0_03-b04, mixed mode)
testing md5 expect a 3 to 10 minute delay
1M blocks - 24065ms 24s
1K blocks - 21381ms 21s
1G hashed in
1M blocks - 24065ms 24s
1K blocks - 21381ms 21s
100K hashed in
1B blocks - 16704ms 16s
- -- - -- - -- - -- - -- - -- - -- - -- - -- -
testing sha0 expect a 3 to 10 minute delay
1M blocks - 38215ms 38s
1K blocks - 38085ms 38s
1G hashed in
1M blocks - 38215ms 38s
1K blocks - 38085ms 38s
100K hashed in
1B blocks - 18757ms 18s
- -- - -- - -- - -- - -- - -- - -- - -- - -- -

compiled with dmd  no options
testing md5 expect a 3 to 10 minute delay
start =1044598753, tm=1044598753
1M blocks - 40s (0m)
1K blocks - 39s (0m)
1G hashed in
1M blocks - 40s (0m)
1K blocks - 39s (0m)
100K hashed in
1B blocks - 35s (0m)
- -- - -- - -- - -- - -- - -- - -- - -- - -- -
testing sha0 expect a 3 to 10 minute delay
start =1044598867, tm=1044598867
1M blocks - 76s (1m)
1K blocks - 76s (1m)
1G hashed in
1M blocks - 76s (1m)
1K blocks - 76s (1m)
100K hashed in
1B blocks - 44s (0m)
- -- - -- - -- - -- - -- - -- - -- - -- - -- -]

with dmd -release things are a little better
testing md5 expect a 3 to 10 minute delay
start =1044599115, tm=1044599115
1M blocks - 36s (0m)
1K blocks - 36s (0m)
1G hashed in
1M blocks - 36s (0m)
1K blocks - 36s (0m)
100K hashed in
1B blocks - 9s (0m)
- -- - -- - -- - -- - -- - -- - -- - -- - -- -
testing sha0 expect a 3 to 10 minute delay
start =1044599196, tm=1044599196
1M blocks - 50s (0m)
1K blocks - 49s (0m)
1G hashed in
1M blocks - 50s (0m)
1K blocks - 49s (0m)
100K hashed in
1B blocks - 12s (0m)
- -- - -- - -- - -- - -- - -- - -- - -- - -- -

apart from the 100K hashed as single bytes, it is still slower than Java

a very odd thing happened when I recompiled and ran with the jdk 1.1.8
testing md5 expect a 3 to 10 minute delay
1M blocks - 14511ms 14s
1K blocks - 14370ms 14s
1G hashed in
1M blocks - 14511ms 14s
1K blocks - 14370ms 14s
100K hashed in
1B blocks - 7030ms 7s
- -- - -- - -- - -- - -- - -- - -- - -- - -- -
testing sha0 expect a 3 to 10 minute delay
1M blocks - 29593ms 29s
1K blocks - 26869ms 26s
1G hashed in
1M blocks - 29593ms 29s
1K blocks - 26869ms 26s
100K hashed in
1B blocks - 8041ms 8s
- -- - -- - -- - -- - -- - -- - -- - -- - -- -

the same class files run under Java 2

testing md5 expect a 3 to 10 minute delay
1M blocks - 24054ms 24s
1K blocks - 21301ms 21s
1G hashed in
1M blocks - 24054ms 24s
1K blocks - 21301ms 21s
100K hashed in
1B blocks - 16443ms 16s
- -- - -- - -- - -- - -- - -- - -- - -- - -- -
testing sha0 expect a 3 to 10 minute delay
1M blocks - 40878ms 40s
1K blocks - 38185ms 38s
1G hashed in
1M blocks - 40878ms 40s
1K blocks - 38185ms 38s
100K hashed in
1B blocks - 17916ms 17s
- -- - -- - -- - -- - -- - -- - -- - -- - -- -

I have to tryout C# and C ( I know I can read from disk and hash at over
45M/s with the C version of MD5 I have )

I've included the source,  so can someone else please verify my findings,
and ideal workout where the performance hit is :)




begin 666 speedtest.src.zip
M4$L#! H``````.$U1RX````````````````.````<W!E961T97-T+G-R8R]0
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
M% `*``````#A-4<N````````````````# ```````````! `P$$`````<W!E
M961T97-T+G-R8R]02P$"% `4``(`" !',4<NO!EY4%X``````0``%P``````
M```!`" `P($L````<W!E961T97-T+G-R8R]B=6EL9"YB87102P$"% `*````
M``"R-4<N````````````````% ```````````! `P$&_````<W!E961T97-T
M+G-R8R]C<GEP=&5D+U!+`0(4`!0`` `(`& =1RZ*?^SK: ```.\````>````
M``````$`( "  ?,```!S<&5E9'1E<W0N<W)C+V-R>7!T960O9&EG97-T+F10
M2P$"% `*``````"R-4<N````````````````' ```````````! `P$&9`0``
M<W!E961T97-T+G-R8R]C<GEP=&5D+V1I9V5S=',O4$L!`A0`% `"`` `H"-'
M+I\/I=6\`0``+ 0``"(``````````0` `("!U0$``'-P965D=&5S="YS<F,O
M8W)Y<'1E9"]D:6=E<W1S+VUD+F102P$"% `4``(`" `[*$<N2Y2)> L&``"$
M$ ``(P`````````!`" ` ('1`P``<W!E961T97-T+G-R8R]C<GEP=&5D+V1I
M9V5S=',O340U+F102P$"% `4``(`" `T*$<N:X& I0P$``! # ``* ``````
M```!`" ` ($=" ``<W!E961T97-T+G-R8R]C<GEP=&5D+V1I9V5S=',O;61C
M;W)E:6UP;"YD4$L!`A0`% `"`` `F A'+I1"1M+O`0``; ,``"0`````````
M`0` `("!<0X``'-P965D=&5S="YS<F,O8W)Y<'1E9"]D:6=E<W1S+U-(03 N
M9%!+`0(4`!0`` `(`*X(1RZ .KZR!0(``(P#```D``````````$`( "  :(0
M``!S<&5E9'1E<W0N<W)C+V-R>7!T960O9&EG97-T<R]32$$Q+F102P$"% `4
M``(`" "W"$<NU(/B0OX%``#G( ``)P`````````!`" ` ('I$ ``<W!E961T
M97-T+G-R8R]C<GEP=&5D+V1I9V5S=',O<VAA:6UP;"YD4$L!`A0`% `"`` `
M2!Y'+E<$.T]%/ ``K:$``"4``````````0` `("!+!D``'-P965D=&5S="YS
M<F,O8W)Y<'1E9"]D:6=E<W1S+U1I9V5R+F102P$"% `4``(`" `$+T<N0P1?
M!<P"``"""0``) `````````!`" ` (&T5P``<W!E961T97-T+G-R8R]C<GEP
M=&5D+V1I9V5S=%]S<&5E9"YD4$L!`A0`% `"`` `3"A'+FRUN!M:" ``(A4`
M`",``````````0` `("!PEH``'-P965D=&5S="YS<F,O8W)Y<'1E9"]D:6=E
M<W1?=&5S="YD4$L!`A0`" ``````YC5'+ ```````````````!,`````````
M```0`,!!76,``'-P965D=&5S="YS<F,O:F%V82]02P$"% `4``(`" #4+4<N
M2_KRAL\'``"5&0``&P`````````!`" ` (&.8P``<W!E961T97-T+G-R8R]J
M879A+TU$-2YJ879A4$L!`A0`% `"`` `;BU'+M4[+>\]" ``\!L``"$`````
M`````0` `("!EFL``'-P965D=&5S="YS<F,O:F%V82]0861D:6YG340N:F%V
M85!+`0(4`!0`` `(`-0M1RY7/864D 8``/XG```;``````````$`( "  1)T
M``!S<&5E9'1E<W0N<W)C+VIA=F$O4TA!+FIA=F%02P$"% `4``(`" #:+4<N
M,X_&ZU,"``":! ``' `````````!`" ` (';> ``<W!E961T97-T+G-R8R]J
M879A+U-(03 N:F%V85!+`0(4`!0`` `(`. M1RYB?!+3: (``- $```<````
M``````$`( "  6A]``!S<&5E9'1E<W0N<W)C+VIA=F$O4TA!,2YJ879A4$L!
M`A0`% `"`` `D2Y'+GE2GW]K` ``10 ``"$``````````0` `("!#( ``'-P
M965D=&5S="YS<F,O:F%V82]497-T4W!E960N:F%V85!+`0(4`!0`` `(`-<M
M1RZFL<T4_CT``"JW```=``````````$`( "  ;:"``!S<&5E9'1E<W0N<W)C
M+VIA=F$O5&EG97(N:F%V85!+`0(4`!0`` `(`,JR1B[2'*+49 ```( ````4
M``````````$`( "  >_ ``!S<&5E9'1E<W0N<W)C+W1E<W0N9%!+!08`````
.%P`7`-<&``"%P0``````
`
end
Feb 06 2003
next sibling parent reply Burton Radons <loth users.sourceforge.net> writes:
Mike Wynn wrote:
 I've been testing some crypto code, basic port of some Java crypto to D
 (the C versions are all macro'ed).
 
 and I got some disturbing results
Uh, yeah. You need to enable optimisations. When I enabled -O the first test went from 36s to 21s; when I enabled -inline as well it went from 21s to 14s.
Feb 07 2003
parent reply "Mike Wynn" <mike.wynn l8night.co.uk> writes:
well it's as good as C# using dmd -release
C# basic edition, not got the full optiomiser etc.
(I've only ported MD5 so far)
testing MD5 expect a 3 to 10 minute delay

start =10786002

1M blocks - 35670ms (35s)
1K blocks - 33165ms (33s)
1G hashed in
1M blocks - 35670ms (35s)
1K blocks - 33165ms (33m)

100K hashed in
1B blocks - 7130ms (7m)

I never noticed -inline or -O  yes that helps, much better results
-release -inline
testing md5 expect a 3 to 10 minute delay
start =1044643391, tm=1044643391
1M blocks - 20s (0m)
1K blocks - 19s (0m)
1G hashed in
1M blocks - 20s (0m)
1K blocks - 19s (0m)
100K hashed in
1B blocks - 8s (0m)
- -- - -- - -- - -- - -- - -- - -- - -- - -- -

-release -inline -O

testing md5 expect a 3 to 10 minute delay
start =1044644195, tm=1044644195
1M blocks - 14s (0m)
1K blocks - 14s (0m)
1G hashed in
1M blocks - 14s (0m)
1K blocks - 14s (0m)
100K hashed in
1B blocks - 8s (0m)

now that's a lot more acceptable, and much closer to what I expected.
(not tries just -O)
looks like we're running on similar hardware
time to find out what a C version can do.

Mike.
- -- - -- - -- - -- - -- - -- - -- - -- - -- -
"Burton Radons" <loth users.sourceforge.net> wrote in message
news:b1vs2a$2smt$1 digitaldaemon.com...
 Mike Wynn wrote:
 I've been testing some crypto code, basic port of some Java crypto to D
 (the C versions are all macro'ed).

 and I got some disturbing results
Uh, yeah. You need to enable optimisations. When I enabled -O the first test went from 36s to 21s; when I enabled -inline as well it went from 21s to 14s.
Feb 07 2003
next sibling parent reply "Mike Wynn" <mike.wynn l8night.co.uk> writes:
D is actually faster than dmc :)

similar MD5 test (C version)

compiled `dmc`
MD5 speed test (C)
time for 1073741824 bytes (1048576k [1024M])
 is 27s (block:1048576 [1024k], count:1024)
time for 1073741824 bytes (1048576k [1024M])
 is 24s (block:1024 [1k], count:1048576)
time for 1073741824 bytes (1048576k [1024M])
 is 83s (block:1 [0k], count:1073741824)

compiled with `dmc -o+speed`
MD5 speed test (C)
time for 1073741824 bytes (1048576k [1024M])
 is 17s (block:1048576 [1024k], count:1024)
time for 1073741824 bytes (1048576k [1024M])
 is 14s (block:1024 [1k], count:1048576)
time for 1073741824 bytes (1048576k [1024M])
 is 60s (block:1 [0k], count:1073741824)

gcc --version    -> 2.95.3-6  (mingw)
MD5 speed test (C)
time for 1073741824 bytes (1048576k [1024M])
 is 30s (block:1048576 [1024k], count:1024)
time for 1073741824 bytes (1048576k [1024M])
 is 27s (block:1024 [1k], count:1048576)
time for 1073741824 bytes (1048576k [1024M])
 is 79s (block:1 [0k], count:1073741824)

gcc -O3
MD5 speed test (C)
time for 1073741824 bytes (1048576k [1024M])
 is 10s (block:1048576 [1024k], count:1024)
time for 1073741824 bytes (1048576k [1024M])
 is 9s (block:1024 [1k], count:1048576)
time for 1073741824 bytes (1048576k [1024M])
 is 52s (block:1 [0k], count:1073741824)


compiled with VC++6 release
MD5 speed test (C)
time for 1073741824 bytes (1048576k [1024M])
 is 10s (block:1048576 [1024k], count:1024)
time for 1073741824 bytes (1048576k [1024M])
 is 10s (block:1024 [1k], count:1048576)
time for 1073741824 bytes (1048576k [1024M])
 is 55s (block:1 [0k], count:1073741824)

and I was interested to find gcc -O3 is the same or faster than VC++

has anyone tried to port the linux D gcc front end to mingw (I've never
managed to get gcc to build so I'm not going to even start to try) ?



"Mike Wynn" <mike.wynn l8night.co.uk> wrote in message
news:b210qd$fqe$1 digitaldaemon.com...
 well it's as good as C# using dmd -release
 C# basic edition, not got the full optiomiser etc.
 (I've only ported MD5 so far)
 testing MD5 expect a 3 to 10 minute delay

 start =10786002

 1M blocks - 35670ms (35s)
 1K blocks - 33165ms (33s)
 1G hashed in
 1M blocks - 35670ms (35s)
 1K blocks - 33165ms (33m)

 100K hashed in
 1B blocks - 7130ms (7m)

 I never noticed -inline or -O  yes that helps, much better results
 -release -inline
 testing md5 expect a 3 to 10 minute delay
 start =1044643391, tm=1044643391
 1M blocks - 20s (0m)
 1K blocks - 19s (0m)
 1G hashed in
 1M blocks - 20s (0m)
 1K blocks - 19s (0m)
 100K hashed in
 1B blocks - 8s (0m)
 - -- - -- - -- - -- - -- - -- - -- - -- - -- -

 -release -inline -O

 testing md5 expect a 3 to 10 minute delay
 start =1044644195, tm=1044644195
 1M blocks - 14s (0m)
 1K blocks - 14s (0m)
 1G hashed in
 1M blocks - 14s (0m)
 1K blocks - 14s (0m)
 100K hashed in
 1B blocks - 8s (0m)

 now that's a lot more acceptable, and much closer to what I expected.
 (not tries just -O)
 looks like we're running on similar hardware
 time to find out what a C version can do.

 Mike.
 - -- - -- - -- - -- - -- - -- - -- - -- - -- -
 "Burton Radons" <loth users.sourceforge.net> wrote in message
 news:b1vs2a$2smt$1 digitaldaemon.com...
 Mike Wynn wrote:
 I've been testing some crypto code, basic port of some Java crypto to
D
 (the C versions are all macro'ed).

 and I got some disturbing results
Uh, yeah. You need to enable optimisations. When I enabled -O the first test went from 36s to 21s; when I enabled -inline as well it went from 21s to 14s.
Feb 07 2003
parent "Nic Tiger" <nictiger progtech.ru> writes:
If MD5 uses floating point math, you should specify -ff switch.
It gives real speed gain.

Nic Tiger.

"Mike Wynn" <mike.wynn l8night.co.uk> сообщил/сообщила в новостях следующее:
news:b214it$i5d$1 digitaldaemon.com...
 D is actually faster than dmc :)

 similar MD5 test (C version)

 compiled `dmc`
 MD5 speed test (C)
 time for 1073741824 bytes (1048576k [1024M])
  is 27s (block:1048576 [1024k], count:1024)
 time for 1073741824 bytes (1048576k [1024M])
  is 24s (block:1024 [1k], count:1048576)
 time for 1073741824 bytes (1048576k [1024M])
  is 83s (block:1 [0k], count:1073741824)

 compiled with `dmc -o+speed`
 MD5 speed test (C)
 time for 1073741824 bytes (1048576k [1024M])
  is 17s (block:1048576 [1024k], count:1024)
 time for 1073741824 bytes (1048576k [1024M])
  is 14s (block:1024 [1k], count:1048576)
 time for 1073741824 bytes (1048576k [1024M])
  is 60s (block:1 [0k], count:1073741824)

 gcc --version    -> 2.95.3-6  (mingw)
 MD5 speed test (C)
 time for 1073741824 bytes (1048576k [1024M])
  is 30s (block:1048576 [1024k], count:1024)
 time for 1073741824 bytes (1048576k [1024M])
  is 27s (block:1024 [1k], count:1048576)
 time for 1073741824 bytes (1048576k [1024M])
  is 79s (block:1 [0k], count:1073741824)

 gcc -O3
 MD5 speed test (C)
 time for 1073741824 bytes (1048576k [1024M])
  is 10s (block:1048576 [1024k], count:1024)
 time for 1073741824 bytes (1048576k [1024M])
  is 9s (block:1024 [1k], count:1048576)
 time for 1073741824 bytes (1048576k [1024M])
  is 52s (block:1 [0k], count:1073741824)


 compiled with VC++6 release
 MD5 speed test (C)
 time for 1073741824 bytes (1048576k [1024M])
  is 10s (block:1048576 [1024k], count:1024)
 time for 1073741824 bytes (1048576k [1024M])
  is 10s (block:1024 [1k], count:1048576)
 time for 1073741824 bytes (1048576k [1024M])
  is 55s (block:1 [0k], count:1073741824)

 and I was interested to find gcc -O3 is the same or faster than VC++

 has anyone tried to port the linux D gcc front end to mingw (I've never
 managed to get gcc to build so I'm not going to even start to try) ?



 "Mike Wynn" <mike.wynn l8night.co.uk> wrote in message
 news:b210qd$fqe$1 digitaldaemon.com...
 well it's as good as C# using dmd -release
 C# basic edition, not got the full optiomiser etc.
 (I've only ported MD5 so far)
 testing MD5 expect a 3 to 10 minute delay

 start =10786002

 1M blocks - 35670ms (35s)
 1K blocks - 33165ms (33s)
 1G hashed in
 1M blocks - 35670ms (35s)
 1K blocks - 33165ms (33m)

 100K hashed in
 1B blocks - 7130ms (7m)

 I never noticed -inline or -O  yes that helps, much better results
 -release -inline
 testing md5 expect a 3 to 10 minute delay
 start =1044643391, tm=1044643391
 1M blocks - 20s (0m)
 1K blocks - 19s (0m)
 1G hashed in
 1M blocks - 20s (0m)
 1K blocks - 19s (0m)
 100K hashed in
 1B blocks - 8s (0m)
 - -- - -- - -- - -- - -- - -- - -- - -- - -- -

 -release -inline -O

 testing md5 expect a 3 to 10 minute delay
 start =1044644195, tm=1044644195
 1M blocks - 14s (0m)
 1K blocks - 14s (0m)
 1G hashed in
 1M blocks - 14s (0m)
 1K blocks - 14s (0m)
 100K hashed in
 1B blocks - 8s (0m)

 now that's a lot more acceptable, and much closer to what I expected.
 (not tries just -O)
 looks like we're running on similar hardware
 time to find out what a C version can do.

 Mike.
 - -- - -- - -- - -- - -- - -- - -- - -- - -- -
 "Burton Radons" <loth users.sourceforge.net> wrote in message
 news:b1vs2a$2smt$1 digitaldaemon.com...
 Mike Wynn wrote:
 I've been testing some crypto code, basic port of some Java crypto
to
 D
 (the C versions are all macro'ed).

 and I got some disturbing results
Uh, yeah. You need to enable optimisations. When I enabled -O the first test went from 36s to 21s; when I enabled -inline as well it
went
 from 21s to 14s.
Feb 08 2003
prev sibling parent reply "Walter" <walter digitalmars.com> writes:
"Mike Wynn" <mike.wynn l8night.co.uk> wrote in message
news:b210qd$fqe$1 digitaldaemon.com...
 looks like we're running on similar hardware
 time to find out what a C version can do.
When comparing to C, use DMC++. The reason is that DMD and DMC++ share the optimizer and back end code generator, so you really are comparing the languages rather than the back ends.
Feb 07 2003
parent reply "Mike Wynn" <mike.wynn l8night.co.uk> writes:
I used the dmc.exe that comes with the D alpha
do you mean use dmc -cpp ?
and is -o+speed the right options to get the fastest code ?

the C version is a bit of a devils advocate version realy, and realisticly I
would expect any OO version to always be a bit slower hashing big blocks
(overhead of virtual methods, and the code reuse) and anything when hashing
1 byte entities. just shows how efficient the virtual call code is.

I think I started off trying to compare langs, and ended up comparing
backends :)
with D, Java and C# the differences in the code are subtle, I've got to try
a Java version that uses and Interface as Sun's VM used to be very poor with
interface methods, a C# version that used COM interfaces, unless it does
anyway. and a C# version with `unsafe` code, as the D version currently uses
pointers.
which means I should write a pointer free D version, along with a D version
that use interfaces too.

I think what was yesterday a random query about performance will be
converted into a real utility to test languages and backends, and methods of
optimising for lang X impl Y.

at first I was very conserned that D was unexpectly slow, it is not, I was
doing the wrong things. however it has reasserted my faith in dynamic
compilers, and that compilation speed is irrelivant, gcc which is dog slow,
comes out top.

so the gauntlet has been put down for the gcc front end coders to get D to
compiler to code at least as fast as equiv C++.

however, performance of such a dedicated app is almost irrelivant, jview
(the MS java) performs about the same as dmd with no options, yet on a real
word app it out performs jdk 1.1.8 (or at least its GUI responce is better).
like dmd is out performs the Jdk on the single byte at a time hash, where
the code path is basically a long chain of calls, branches, and reads.
rather than the maths intense md code. and is IMHO a more important
benchmark as it reflects the types of ops that a real usefull app would be
doing.
the 1M hash speed is a test of how good the optimiser for maths code and
register allocaters are.
I've got a couple of other implementations and will have a play with seeing
if the changes to code make any changes to performance.


Mike.


"Walter" <walter digitalmars.com> wrote in message
news:b219t5$la2$1 digitaldaemon.com...
 "Mike Wynn" <mike.wynn l8night.co.uk> wrote in message
 news:b210qd$fqe$1 digitaldaemon.com...
 looks like we're running on similar hardware
 time to find out what a C version can do.
When comparing to C, use DMC++. The reason is that DMD and DMC++ share the optimizer and back end code generator, so you really are comparing the languages rather than the back ends.
Feb 07 2003
parent "Walter" <walter digitalmars.com> writes:
In reality, you shouldn't see much difference in that code between
C/C++/D/Java/C#. The reason is it is integer math intensive, and does not do
much with objects, strings, etc. Those languages all treat integer math
about the same.
Feb 07 2003
prev sibling parent "Walter" <walter digitalmars.com> writes:
"Mike Wynn" <mike.wynn l8night.co.uk> wrote in message
news:b1vlms$2o31$1 digitaldaemon.com...
 I've been testing some crypto code, basic port of some Java crypto to D
 (the C versions are all macro'ed).
Could you post/email the C version please, just so I'm using the same code? Thanks!
Feb 09 2003