我正在研究多核机器上的并行算法的性能。我使用循环重新排序(ikj)技术进行了矩阵乘法的实验。
串行执行结果如下图所示.L1数据高速缓存命中循环次序ikj和kij所有大小的nXn矩阵接近100%(图1盒号1和2)并且你可以看到循环次序ikj在大小2048和4096突然L2数据cach命中减少%50(图2盒号1和2)也在L2指令缓存命中同样如此。对于这2个大小的L1数据高速缓存命中的情况与其他大小(256,512,1024)大约是%100。在指令和数据缓存命中中,我找不到任何合理的斜率原因。任何人都可以告诉我如何找到原因?
你认为L2统一缓存对加剧问题有什么影响吗?但是仍然是什么导致这种减少算法和性能的特征应该我找到原因。
实验机是Intel e4500,带2Mb二级缓存,缓存行64,os是fedora 17 x64,带gcc 4.7 -o无编译器优化 Abridged&完整问题?
my problem is that why sudden decrease of about 50% in both L2 data and instruction cache happens in only ikj & kij algorithm as it's boxed and numbered 1 & 2 in images, but not in other loop variation
的
*Image 1*
*Image 2*
*Image 3*
*Image 4*
*Image 5*
尽管存在上述问题,但ikj& kij算法的时间没有增加。但也比其他人快。
ikj和kij算法是循环重排序技术的两种变体/
kij算法
For (k=0;k<n;k++)
For(i=0;i<n;i++){
r=A[i][k];
For (j=0;j<n;j++)
C[i][j]+=r*B[k][j]
}
ikj算法
For (i=0;i<n;i++)
For(k=0;k<n;k++){
r=A[i][k];
For (j=0;j<n;j++)
C[i][j]+=r*B[k][j]
}
感谢
答案 0 :(得分:4)