9

我正在研究多核机器上并行算法的性能。我用循环重新排序(ikj)技术做了一个关于矩阵乘法的实验。

串行执行结果如下图所示。所有大小的 nXn 矩阵的循环顺序 ikj 和 kij 的 L1 数据缓存命中率接近 100%(图像 1 框编号 1 和 2),并且您可以看到大小为 2048 的循环顺序 ikj并且 4096 突然 L2 数据缓存命中减少了 %50(图 2 框编号 1 和 2),在 L2 指令缓存命中也是如此。如果这 2 个大小的 L1 数据缓存命中率与其他大小(256,512,1024)一样,则约为 %100。在指令和数据缓存命中中,我找不到任何合理的理由来解释这个斜率。任何人都可以告诉我如何找到原因吗?

你认为L2统一缓存对加剧问题有什么影响吗?但是仍然是什么导致了这种减少,我应该分析算法和性能的哪些特征来找到原因。

实验机器是 Intel e4500,带有 2Mb L2 缓存,缓存行 64,操作系统是 fedora 17 x64,带有 gcc 4.7 -o 没有编译器优化

精简和完整的问题? 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] 
    }   

谢谢

4

1 回答 1

4

我敢打赌,这是因为在回答以下问题时讨论了超级对齐问题:

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

于 2013-10-12T15:36:38.613 回答