mjr*_*mjr 9 c++ optimization performance
我正在研究多核机器上的并行算法的性能.我使用循环重新排序(ikj)技术进行了矩阵乘法的实验.
串行执行结果如下图所示.L1数据高速缓存命中循环次序ikj和kij所有大小的nXn矩阵接近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,os是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*
Run Code Online (Sandbox Code Playgroud)

*Image 2*
Run Code Online (Sandbox Code Playgroud)

*Image 3*
Run Code Online (Sandbox Code Playgroud)

*Image 4*
Run Code Online (Sandbox Code Playgroud)

*Image 5*
Run Code Online (Sandbox Code Playgroud)
尽管存在上述问题,但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]
}
Run Code Online (Sandbox Code Playgroud)
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]
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我打赌发生这种情况是因为在回答以下问题时讨论了超级对齐问题:
我希望可以理解我不喜欢复制和粘贴这些答案。
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |