PCI ID で識別されるマルチ GPU システム上のシステムで、OpenCL デバイスを GPU と一致させたいと考えています。
たとえば、システムに複数の GPU (おそらく異なるベンダー製) がある場合、PCI バスを列挙することでデバイスを一覧表示できます。これにより、PCI ベンダー、デバイス、およびバス ID が得られます。いくつかの選択基準に基づいて OpenCL 計算に使用するこれらの (GPU) PCI デバイスの 1 つを選択した場合、それを OpenCL デバイスに一致させるにはどうすればよいですか?
clGetDeviceIDs()を使用して OpenCL で GPU デバイスを列挙できますが、OpenCL デバイスを PCI デバイスに一致させる明らかな方法はありません。OpenCL 関数clGetDeviceInfo()は、PCI ベンダー ID とデバイス名へのアクセスを提供しますが、PCI デバイスまたはバス ID へのアクセスは提供しません。PCI デバイス名と OpenCL デバイス名を一致させることはできますが、同じタイプのデバイスが複数ある可能性があり、名前が常に同じであるとは限りません。
なぜこれが必要なのですか?プログラム X が GPU A で CUDA などを実行していることを知っているとします。OpenCL 操作に GPU A も使用することを避けたいので、GPU B を選択します。次に、どの OpenCL デバイスが GPU A で、どれが GPU であるかを把握する必要があります。 B. PCI ID は、GPU デバイスを識別する唯一の一貫したクロス プラットフォームの方法のようです。
ところで、CUDA API は PCI、バス、およびスロット ID (CU_DEVICE_ATTRIBUTE_PCI_BUS_ID、CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) を提供しますが、CUDA は NVidia デバイスでのみ動作します。
理想的には、C または C++ を使用したソリューションが必要です。