
Speed of dot product in Mathematica
Posted:
Nov 12, 1996 1:19 PM


The speed of dot products in Mathematica 2.2 depends significantly on implementation. For example, timing
n=10000; a=Table[1.,{n}]; b=a; Print[Timing[a.b]]; Print[Timing[s=Sum[a[[i]]*b[[i]],{i,1,n}]]] Print[Timing[s=0;Do[s+=a[[i]]*b[[i]],{i,1,n}]]]; Print[Timing[s=0;For[i=0,i<=n,i++,s+=a[[i]]*b[[i]] ]]];
on a Mac 8500 gives
{0.0666667 Second, 10000.} {1.48333 Second, 10000.} {2.38333 Second, Null} {3.95 Second, Null}
Is there a way to speed up the Sum form, for example using Compile, so that it achieves a performance similar to that of the builtin dot operator?
This is important in matrix routines where the dot product involves only portions of rows or columns, or where the stride is not unity.
BTW, several of the LinearAlgebra Package functions (e.g. lufactor) use the Forloop implementation. As shown above, that has the worst performance, being 60 times slower than the builtin operator.

