我想知道是否有人可以帮助我进行循环平铺优化以最大限度地减少缓存未命中。我正在研究四个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;
}
}
}