缓存未命中的循环平铺优化openmp

时间:2013-10-03 20:15:26

标签: c++ loops caching optimization tiling

我想知道是否有人可以帮助我进行循环平铺优化以最大限度地减少缓存未命中。我正在研究四个4000x4000浮点矩阵乘法。

该机器有三个级别的缓存,其值为:L1 128kb,L2 1Mb和L3 8Mb

有四个嵌套循环,并没有完美嵌套。

for(int i=0; i<NN; i++) {
    for (int j=0; j<NN; j++) {
        if (i != j){
            thirdlayer = 0;
            for (int k=0; k<NN; k++) {
                fourthlayer = 0;
                for (int l=0; l<NN; l++) {
                    fourthlayer =  fourthlayer + V[j*NN+l]*V[NN+l]*J[k*NN+l];
                }
                thirdlayer = thirdlayer + V[k]*V[i*NN+k]*fourthlayer;
            }
            if(pi_cod[j] != 0)
                Transitions[i*NN +j] =  sqrt(pi_cod[i]*pi_cod[1]/(pi_cod[0]*pi_cod[j]))*Q[i*NN +j]*thirdlayer/Padt;
        }
    }
}

0 个答案:

没有答案