Fast multidimensional Arrays

Steinhagelvoll via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Aug 29 02:53:12 PDT 2016


Hello,

I'm trying to find a fast way to use multi dimensional arrays. 
For this I implemented a matrix multiplication and compared the 
times for different ways. As a reference I used a Fortran90 
implementation.

Fortran reference: http://pastebin.com/Hd5zTHVJ
ifort test.f90  -o testf && time ./testf
real    0m0.680s
user    0m0.672s
sys     0m0.008s

ifort -O3 test.f90 -o testf && time ./testf
real    0m0.235s
user    0m0.228s
sys     0m0.004s

ifort -check all test.f90  -o testf && time ./testf
         1000

real    0m34.993s
user    0m35.012s
sys     0m0.008s


For D it tried a number of different ways:

NDSlice: http://pastebin.com/nUbMnt8B
real	0m35.922s
user	0m35.888s
sys	0m0.008


1D Arrays: http://pastebin.com/R7CJFybK
dmd -boundscheck=off -O test.d && time ./test
real	0m4.415s
user	0m4.412s
sys	0m0.004s

ldc2 -O3 test.d && time ./test
real	0m4.261s
user	0m4.252s
sys	0m0.004s

2D Arrays: http://pastebin.com/4CuB4Y0c

dmd -boundscheck=off -O nd_test.d && time ./nd_test
real	0m3.565s
user	0m3.560s
sys	0m0.004s


ldc2 -O3 nd_test.d && time ./nd_test
real	0m3.568s
user	0m3.560s
sys	0m0.004s

None of them is even close to the Fortran implementation, only 
when I enable all check in Fortran it seems to be equal to 
Ndslice. Is there a speedy way to use multi-dimensional matrices?

Kind regards

Matthias


More information about the Digitalmars-d-learn mailing list