gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:40:58 24 4
gpt4 key购买 nike

我正在研究多核机器上并行算法的性能。我使用循环重排序 (ikj) 技术对矩阵乘法进行了实验。

串行执行结果如下图所示。所有大小的 nXn 矩阵的循环顺序 ikj 和 kij 的 L1 数据缓存命中率接近 100%(图像 1 框编号 1 和 2),正如您所看到的循环顺序 ikj在大小为 2048 和 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 没有编译器优化

删节和完整的问题? 我的问题是为什么 L2 数据和指令缓存突然减少大约 50% 只发生在 ikj 和 kij 算法中,因为它在图像中被装箱并编号为 1 和 2,但在其他循环变体中没有发生?

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

谢谢

最佳答案

关于c++ - L2数据和指令缓存突然减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com