Matrix mul
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Nov 22 14:54:42 PST 2008
bearophile wrote:
> While writing code that works on matrices I have found something
> curious, so I have written the following little benchmark. As usual
> keep eyes open for possible bugs and mistakes of mine:
[snip]
This is yet another proof that bounds checking can cost a lot. Although
the looping code looks the same, in the case of using arrays there are
plenty of bounds checks going on. My guess is that if you turn that off,
the differences won't be as large (or even detectable for certain ranges
of N).
> --------------------------
> Note there are much faster ways to perform A * B:
>
> // Alternative mul code
> double[] bj = new double[N];
> for (int j = 0; j < N; j++) {
> for (int k = 0; k < N; k++)
> bj[k] = B[k][j];
> for (int i = 0; i < N; i++) {
> double[] ai = A[i];
> double s = 0;
> for (int k = 0; k < N; k++)
> s += ai[k] * bj[k];
> C[i][j] = s;
> }
> }
Probably blocking will bring even more mileage (but again that depends
on N).
Andrei
More information about the Digitalmars-d
mailing list