Element-wise addition of arrays
Don
nospam at nospam.com
Thu Aug 19 07:01:33 PDT 2010
Eduardo Cavazos wrote:
> Hello,
>
> Here's a short program which compares via 'benchmark' two ways to
> perform element-wise addition of two arrays.
>
> ----------------------------------------------------------------------
> import std.stdio ;
> import std.date ;
> import std.random ;
>
> void main ()
> {
> double [2] a ;
> double [2] b = [ uniform ( 0.0 , 1.0 ) , uniform ( 0.0 , 1.0 ) ] ;
> double [2] c = [ uniform ( 0.0 , 1.0 ) , uniform ( 0.0 , 1.0 ) ] ;
>
> void add ( double [2] a , double [2] b , double [2] c )
> {
> a[0] = b[0] + c[0] ;
> a[1] = b[1] + c[1] ;
> }
>
> void f0 () { add ( a , b , c ) ; }
>
> void f1 () { a[] = b[] + c[] ; }
>
> writeln ( benchmark ! ( f0 , f1 ) ( 10_000_000 ) ) ;
> }
> ----------------------------------------------------------------------
>
> On my system, it seems that 'f1' is slower than 'f0'. Let me know if
> somethings not right with the test program or if there's a better way to
> do the benchmark.
That's correct. There is a substantial overhead in the current
implementation of array operations. My guess is that the array length
needs to be about 10 or so before array ops start to win.
> Anywho my question is, in principle, isn't enough information available
> to the compiler such that it can make 'f1' be as fast as 'f0'? I'm just
> wondering if I'll need to make functions like the above 'add' which are
> specific for 2 and 3 element arrays.
Yes, it's a simple implementation issue, which is on the TODO list. It
shouldn't be terribly difficult to do.
More information about the Digitalmars-d
mailing list