奇妙な動作が見られます。Intel Xeon Phi に関連するものかどうかを知りたいです。
基本的に誰もが知っている行列乗算 (3 つのネストされた for ループ) の小さなコード例があります。target
OpenMP 4.0プラグマを使用して Intel MIC に計算をオフロードし、3 つの行列をmap(to:A,B)
map(tofrom:C)
.
現在、私が観察しているのは、1024x1024 などの小さな行列の場合、メモリ転送に非常に長い時間がかかることです。ネイティブ バージョン (同じコード、同じ並列化戦略、オフロードなし) と比較して、オフロード バージョンは約 320 ミリ秒多くの時間を消費します。初期化のオーバーヘッドを取り除くために、コードのウォームアップを実行しました。
この 320 ミリ秒に気付かずに同じ量のメモリがコピーされる Nvidia Tesla K20 と比較すると、非常に悪いです。
メモリ転送速度を改善できる環境設定はありますか?
追加の質問: OFFLOAD_REPORT 環境変数を介してオフロード レポートを有効にしました。レポートに表示される 2 つのタイミング結果の違いは何ですか。
[Offload] [HOST] [Tag 5] [CPU Time] 26.995279(seconds)
[Offload] [MIC 0] [Tag 5] [CPU->MIC Data] 3221225480 (bytes)
[Offload] [MIC 0] [Tag 5] [MIC Time] 16.859548(seconds)
[Offload] [MIC 0] [Tag 5] [MIC->CPU Data] 1073741824 (bytes)
MIC Time で欠けている 10 秒は何ですか (メモリー転送?)
さて、3つ目の質問です。Intel MIC で固定メモリを使用することは可能ですか? はいの場合、どのように?