Fast multidimensional Arrays
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Aug 29 07:13:41 PDT 2016
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];
}
}
}
}
More information about the Digitalmars-d-learn
mailing list