Dne 29.8.2016 v 16:08 rikki cattermole via Digitalmars-d-learn napsal(a):

Okay looks like I've made a boo boo and ldc is compiling out that entire multiplication loop out.

Its passing the array statically and since its never assigned back, its just never compiled in (unless you specify it via ref).

So, this is where I give up as it is 2am.

Perhaps try and make it parallel (std.parallemism can help hugely).
this is my version:

import std.stdio;

immutable int n = 1000, l=1000, m=1000;

struct ZeroDouble
{
    double val = 0f;
    alias val this;
}

void main(string[] args)
{
    auto A = new double [1000][m];
    auto B = new double [1000][n];
    auto C = new ZeroDouble[1000][n];
    ini!(A);
    ini!(B);
    MatMul!(A,B,C);
    writeln(C[1][1]);
    writefln("%d   %d ", C.length, C[0].length);
}

void ini(alias mtx)(){
    foreach(i, ref mtxInner; mtx) {
        foreach(j, ref cell; mtxInner) {
            cell = i*j + 0.6*j +3.4;
        }
    }
}

void MatMul(alias A, alias B, alias C)() {
    foreach(i, ref cv; C) {
        foreach(j, av; A[i]) {
            foreach(k, ref cvv; cv) {
                cvv += av * B[j][k];
            }
        }
    }
}

Reply via email to