2

条件:

デュアル ソケットXeonを備えた HPC サーバーの説明に従って、AMD OpenCL バージョンAMD-APP-SDK-v2.8-lnx64および Intel OpenCL バージョン *intel_sdk_for_ocl_applications_xe_2013_r2_sdk_3.1.1.11385_x64* (バージョン識別はこれ以上複雑ではありません) をインストールしました。 E5-2650、Xeon Phi コプロセッサー、64 GB のホスト メモリ、および Red Hat Enterprise Server 6.4。

問題の説明:

NUMAの問題を回避するために、OpenCLデバイスの分割を行いたいと考えています。残念ながら、デバイス (Intel CPU) または Linux カーネルがCL_DEVICE_PARTITION_BY_AFFINITY_DOMAINをサポートしていないようです。Intel OpenCL と AMD OpenCL の両方を試しました。AMD OpenCL デバイス クエリでは、アフィニティ ドメイン オプションをサポートしていると表示されていますが、実際にはサポートされていません。フォーラムの投稿によると、これは現在の Intel OpenCL ドライバーのバグだと思います。

考えられる解決策:

(合計 32 個の並列計算コアから) 最初の 16 個の並列計算コア (8 コア + 8 ハイパースレッド) を選択できれば、それらは最初のソケットにマップされると考えました。残念ながら、Intel OpenCL は 16 個の並列計算コアを 32 個のコアにランダムに分散します。一方、AMD OpenCL は最初の 16 個の並列計算コアを選択しますが、OpenCL コンパイラは私が実行しているカーネルでうまく機能しません。ここでもランチなしの定理が成り立ちます。

質問:

  1. OpenCL が計算に使用する並列計算コアを指定する方法はありますか?
  2. OpenCL でこの NUMA の問題を解決する方法はありますか?

NUMA アフィニティの経験に関するコメントは大歓迎です。

ありがとうございました!


アップデート

単一ソケットのテストにのみ適用される部分的な回避策:

(Linux の場合) NUMA ノードからすべてのコアを無効にして、OpenCL ICD が他の NUMA ノードのハードウェア スレッドからのみ選択できるようにします。例えば。2 ソケット 32 HTT システムの場合:

sudo sh -c "echo 0 > /sys/devices/system/cpu/cpu31/online"
....
sudo sh -c "echo 0 > /sys/devices/system/cpu/cpu16/online"

このハッキングに副作用がないかどうかはわかりませんが、これまでのところ (少なくともテストでは) 機能しているようです。

4

0 に答える 0