私はマルチコアマシン上でparalleアルゴリズムのパフォーマンスに取り組んでいます。私は、ループの並べ替え(ikj)テクニックを使った行列乗算の実験を行った。L2データと命令キャッシュが突然減少しました
シリアル実行の結果は、以下の画像と同じです。ループ順序ikjのためのL1データキャッシュ、nXn行列のすべてのサイズに対するkijは100%に近い値です(画像1ボックス番号1 & 2) ikjのサイズは2048と4096であり、L2データキャッシュは%50(画像2ボックス番号1 & 2)だけ減少し、L2命令キャッシュでも同じことが当てはまります。これらの2つのサイズのL1データキャッシュが他のサイズ(256,512,1024)とほぼ同じような場合のIncaseは、約%100です。私は命令とデータのキャッシュヒットの両方でこの勾配のための何らかの共振可能な理由を見つけることができませんでした。どのように私は理由(単数または複数)を見つけるために手がかりを与えることができますか?
L2統合キャッシュは問題を悪化させることに何らかの影響を与えると思いますか?しかし、何が原因でアルゴリズムやパフォーマンスの特性がプロファイルされるべきなのか、この削減の原因は何か。
実験機は、OSは-oなしコンパイラの最適化が
要約版&コンプリート質問GCC 4.7でのFedora 17のx64で、2MバイトのL2キャッシュ、キャッシュライン64とのIntel E4500のですか? 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*
上記の問題にもかかわらず、ikj &kijアルゴリズムのタイミングの増加はありません。しかし、他のものよりも速いです。
IKJとKIJアルゴリズムループの2つのバリエーションは、アルゴリズム
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]
}
IKJ技術/
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]
}
を並べ替えている私がいるため、この問題が発生した賭けのおかげ
これは不可能です。ループはL1命令キャッシュに簡単に収まるため、L2命令のヒット率が低下することはありません。あなたのプロファイラはボルケーキでなければならず、あまりにも頻繁に先取りされるスレッドの副作用を測定しています。 –
@hansループは命令キャッシュに収まるとはどういう意味ですか?また、私は並列命令を実行しました。また、L1命令のバリエーションもあり、L2命令でもヒットしました.ikjとkijアルゴリズムのボックス1と2の間違いです! – mjr
1レベルのブロッキングでプロファイリングを実行しましたが、このバリエーションは見られませんでしたので、今私は混乱しています! – mjr