L2数据和指令缓存突然减少

时间:2013-10-12 13:55:55

标签: c++ performance optimization

我正在研究多核机器上的并行算法的性能。我使用循环重新排序(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*

enter image description here

                                    *Image 2*

enter image description here

                                    *Image 3*

enter image description here

                                   *Image 4*

enter image description here

                                   *Image 5*

尽管存在上述问题,但ikj& kij算法的时间没有增加。但也比其他人快。 enter image description here

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] 
    }   

感谢

1 个答案:

答案 0 :(得分:4)

我敢打赌,这是因为在以下问题的答案中讨论的超对齐问题:

我希望我不喜欢复制和粘贴这些答案是可以理解的。