2

複数のGPUを備えたLinuxシステムで、X11を実行しているGPUと、CUDAカーネルを完全に無料で実行できるGPUをどのように判断できますか?X11を実行するための低電力GPUとカーネルを実行するための高電力GPUを備えたシステムでは、これは、より高速なカードを使用するためのいくつかのヒューリスティックで決定できます。ただし、2枚の等しいカードがあるシステムでは、この方法は使用できません。これを決定するためのCUDAおよび/またはX11APIはありますか?

更新:コマンド'nvidia-smi -a'は、「ディスプレイ」が接続されているかどうかを示します。これが物理的に接続されているのか、論理的に接続されている(X11を実行している)のか、またはその両方を意味するのかはまだわかりません。このコマンドでstraceを実行すると、多くのioctlが呼び出され、X11が呼び出されないことが示されるため、カードがディスプレイが物理的に接続されていることを報告していると想定します。

4

2 に答える 2

2

構造体には、デバイスがディスプレイウォッチドッグタイマーの対象であるかどうかを示すデバイスプロパティがありますkernelExecTimeoutEnabledcudaDevicePropこれは、特定のCUDAデバイスがX11(またはWindows / Mac OSと同等のもの)を実行しているかどうかを示す最良の指標です。

PyCUDAでは、次のようにデバイスのステータスを照会できます。

In [1]: from pycuda import driver as drv

In [2]: drv.init()

In [3]: print drv.Device(0).get_attribute(drv.device_attribute.KERNEL_EXEC_TIMEOUT)
1

In [4]: print drv.Device(1).get_attribute(drv.device_attribute.KERNEL_EXEC_TIMEOUT)
0

ここで、デバイス0にはディスプレイが接続されており、デバイス1は専用のコンピューティングデバイスです。

于 2011-07-28T11:43:01.127 に答える
0

それをチェックできるライブラリ関数はわかりません。ただし、1つの「ハック」が念頭にあります。X11、または接続されたモニターを管理するその他のシステムコンポーネントは、GPUメモリの一部を消費する必要があります。

したがって、両方のデバイスが「cudaGetDeviceProperties」を介して同じ量の使用可能なグローバルメモリを報告するかどうかを確認してから、「totalGlobalMem」フィールドの値を確認します。同じ場合は、各GPUにその(またはわずかに少ない)量のメモリを割り当ててみて、どれが失敗したかを確認します(cudaMallocがエラーフラグを返します)。

少し前に、GPUにアクティブなCUDAコンテキストがあるときに、モニターの解像度を上げると、コンテキストが無効になる可能性があることをどこかで読みました(どこにあるかは覚えていません)。これは、上記の提案が機能する可能性があることを示唆しています。ただし、実際に試したことはないことに注意してください。それは私の大げさな推測です。

動作すること、または動作しないことを確認できた場合は、お知らせください。

于 2011-06-21T19:10:12.777 に答える