単一のノードで、異なるコンピューティング機能を持ついくつかのデバイスがあると仮定します.nvidiaはそれらをどのようにランク付けしますか(ランクとは、cudaSetDeviceによって割り当てられた番号を意味します)?
これに関する一般的なガイドラインはありますか?ありがとう。
cudaGetDeviceおよびcudaSetDeviceに対応するデバイスの順序付け(つまり、CUDA ランタイムの列挙順序は、最速のデバイスを決定して最初に作成するヒューリスティックに基づくか、PCI 列挙順序に基づく必要があります。これは、 deviceQuery サンプルを使用して確認できます。cudaSetDevice で列挙された順序に基づいて、デバイスのプロパティ (PCI ID を含む) を出力します。
ただし、これに基づいて決定を下すことはお勧めしません。PCI の列挙順序について魔法のようなことは何もなく、システム BIOS のアップグレードなどによっても、デバイスの列挙順序が変更される可能性があります (デバイスの交換、別のシステムへの移動などと同様)。
通常は、デバイスのクエリを実行し (deviceQuery サンプルを参照)、返された特定のデバイスやそのプロパティに基づいて決定を下すことをお勧めします。cudaChooseDeviceを使用して、ヒューリスティックにデバイスを選択することもできます。
CUDA 8の環境変数の設定 (または不足) に基づいて、CUDA ランタイムに "Faster First" または "PCI Enumeration Order" のいずれかを選択させることができます。