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