問題タブ [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.

0 投票する
2 に答える
1627 参照

c++ - Xeon Phi のシミュレーター/エミュレーターはありますか?

一部の計算を Xeon Phi にオフロードする予定ですが、最初に、さまざまな API とさまざまなアプローチで並列プログラミングをテストしたいと考えています。

Xeon Phi (Windows または Linux) 用のシミュレーター/エミュレーターはありますか?

0 投票する
1 に答える
1903 参照

c++ - Intel コンパイラを使用して C++ 関数のインライン化を強制できない

次のように定義された関数があります

(これ__m512dは、インテル MIC アーキテクチャーの SIMD レジスターへのネイティブ データ型マッピングです)

この関数はかなり短く、頻繁に呼び出されるため、呼び出しのたびにインライン化する必要があります。しかし、Intel のコンパイラは、オプション-inline-forceinline-O3オプションを使用した後でも、この関数をインライン化することに消極的です。コンパイル中に「Forceinline が呼び出されませんでした ...」と報告されます。タイプなど、コンパイラー固有の機能を使用する必要があるため__m512d、Intel コンパイラーが唯一の選択肢です。

より詳しい情報:

ファイル構造は非常に単純です。関数は、別のファイルに含まれるvec_addヘッダー ファイルで定義されます。関数はループ内で繰り返し呼び出されるだけで、関数ポインターは関係ありません。コードの簡略化されたバージョンは次のようになりますmic.htest.ccvec_addtest.cc

、 、コンパイラ オプションなど__attribute__((always_inline))、あらゆる種類のヒントを試しましたが、まだ機能していません。__forceinline-inline-forceinline

完全なコード

関連するすべてのコードを簡略化された形式にまとめました。Intel コンパイラをお持ちの場合は、試すことができます。オプション-Winlineを使用して、インライン レポートを表示し、-inline-forceinlineインライン化を強制します。

構成

  • コンパイラ: インテル コンパイラ(ICC) 14.0.2
  • コンパイル オプション:-O3 -inline-forceinline -Winline

この関数をインライン化できない理由がわかりましたか? 結局、どうすればインライン化できますか(マクロにはなりたくありません)?

0 投票する
2 に答える
1060 参照

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 に変更すると、パフォーマンスが低下します。

では、このような答えなら、なぜ組み込み関数を使用する必要があるのでしょうか?
私はどこかで間違いを犯しましたか?
コードを最適化するための良い提案を誰かに教えてもらえますか?

0 投票する
1 に答える
65 参照

intel - Intel MIC アーキテクチャでネイティブに実行されるアプリケーションのキャッシュ パフォーマンスをプロファイリングする方法

アプリケーションの特定のデータが、MIC でネイティブに実行されるアプリケーションの L1 キャッシュまたは L2 キャッシュに収まるかどうかを確認する方法。L1キャッシュ、L2キャッシュ、およびどちらのキャッシュにも収まらないさまざまなデータを試す必要があるため、長い間検索してきましたか?

0 投票する
0 に答える
368 参照

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 フォーラムに投稿しましたが、成功しませんでした。