収集プリフェッチ組み込み関数_mm512_mask_prefetch_i32gather_ps
を使用して、Knights Corner で 32 ビット float をプリフェッチできます。
double に対応する組み込み関数が存在しないため、この組み込み関数を 64 または 128 ビット要素のプリフェッチに使用するにはどうすればよいですか?
4 バイトのチャンクごとに明示的にプリフェッチする必要がありますか? それとも、32 ビット変数のプリフェッチごとに、それが占有する 64 バイトのキャッシュ ライン全体を実際にプリフェッチすると想定できますか?
例:
{1,2,10,12}
base address からのオフセットで 4 つの double をプリフェッチしたいと考えています0xf0000000
。
これは のアドレスに対応します{0xf0000008, 0xf0000010, 0xf0000050, 0xf0000060}
。
これらは、 から始まる 2 つのキャッシュ ラインを占有し{0xf0000000, 0xf0000040}
ます。
_mm512_mask_prefetch_i32gather_ps
これら 2 つのキャッシュ ラインのベース アドレスを使用するだけで十分でしょうか?
私はもともとこの質問を Intel MIC フォーラムに投稿しましたが、成功しませんでした。