問題タブ [intel-mic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Xeon Phi のシミュレーター/エミュレーターはありますか?
一部の計算を Xeon Phi にオフロードする予定ですが、最初に、さまざまな API とさまざまなアプローチで並列プログラミングをテストしたいと考えています。
Xeon Phi (Windows または Linux) 用のシミュレーター/エミュレーターはありますか?
c++ - Intel コンパイラを使用して C++ 関数のインライン化を強制できない
次のように定義された関数があります
(これ__m512d
は、インテル MIC アーキテクチャーの SIMD レジスターへのネイティブ データ型マッピングです)
この関数はかなり短く、頻繁に呼び出されるため、呼び出しのたびにインライン化する必要があります。しかし、Intel のコンパイラは、オプション-inline-forceinline
と-O3
オプションを使用した後でも、この関数をインライン化することに消極的です。コンパイル中に「Forceinline が呼び出されませんでした ...」と報告されます。タイプなど、コンパイラー固有の機能を使用する必要があるため__m512d
、Intel コンパイラーが唯一の選択肢です。
より詳しい情報:
ファイル構造は非常に単純です。関数は、別のファイルに含まれるvec_add
ヘッダー ファイルで定義されます。関数はループ内で繰り返し呼び出されるだけで、関数ポインターは関係ありません。コードの簡略化されたバージョンは次のようになりますmic.h
test.cc
vec_add
test.cc
、 、コンパイラ オプションなど__attribute__((always_inline))
、あらゆる種類のヒントを試しましたが、まだ機能していません。__forceinline
-inline-forceinline
完全なコード
関連するすべてのコードを簡略化された形式にまとめました。Intel コンパイラをお持ちの場合は、試すことができます。オプション-Winline
を使用して、インライン レポートを表示し、-inline-forceinline
インライン化を強制します。
構成
- コンパイラ: インテル コンパイラ(ICC) 14.0.2
- コンパイル オプション:
-O3 -inline-forceinline -Winline
この関数をインライン化できない理由がわかりましたか? 結局、どうすればインライン化できますか(マクロにはなりたくありません)?
c - インテル® Xeon Phi を使用した組み込み関数は、自動ベクトル化よりも優れたパフォーマンスを発揮しますか?
Intel Xeon Phi は、「IMCI」命令セット
を使用して提供します。私はそれを使用して、次のように「c = a*b」を実行しました。
そして、パフォーマンスをテストします。N SIZE が 1048576 の場合、
0.083317 秒のコストが必要です。パフォーマンスを自動ベクトル化と比較したい
ので、他のバージョン コードは次のようになります。
このバージョンのコストは 0.025475 秒 (0.002285 以下の場合もありますが、理由はわかりません)
_Cilk_for を #pragma omp parallel for に変更すると、パフォーマンスが低下します。
では、このような答えなら、なぜ組み込み関数を使用する必要があるのでしょうか?
私はどこかで間違いを犯しましたか?
コードを最適化するための良い提案を誰かに教えてもらえますか?
intel - Intel MIC アーキテクチャでネイティブに実行されるアプリケーションのキャッシュ パフォーマンスをプロファイリングする方法
アプリケーションの特定のデータが、MIC でネイティブに実行されるアプリケーションの L1 キャッシュまたは L2 キャッシュに収まるかどうかを確認する方法。L1キャッシュ、L2キャッシュ、およびどちらのキャッシュにも収まらないさまざまなデータを試す必要があるため、長い間検索してきましたか?
intrinsics - _mm512_mask_prefetch_i32gather_ps() は各要素のキャッシュ ライン全体をプリフェッチしますか?
収集プリフェッチ組み込み関数_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 フォーラムに投稿しましたが、成功しませんでした。