質問: プロセスに使用されているgpuコアの数を決定する方法は? ご存知のように、cpuに4つのコアがある場合、最大使用率は400%となり、合計使用率が200%の場合、4つのコアのうち2つのコアが使い果たされたと分析されます。したがって、gpuの場合、最大使用率は100%であり、合計使用率が80%の場合、使用されているコアの数を分析するにはどうすればよいでしょうか。nvidiaグラフィックスの場合、nvidia-smiを使用してnvidia gpu使用率を確認できます。インテルグラフィックスの場合、intel_gpu_time/intel-gpu-topを使用してigpuの使用率を確認できます。しかし、どちらも使用されているgpuコアの数を示していません。それを行う方法はありますか?linuxを使用しています。 ubuntu 14.04とcentos 7.2の両方
回答: gpuでは、100%の使用率は、すべてのコアが基本的に命令を実行していることを意味します。これらの命令がすべて融合積和演算である場合、最高のパフォーマンスで実行されます。a = a + b * c、ほとんどの現在のgpuは単一の命令のみを使用して実行できます。gpuで計算を実行するプログラム(cudaまたはopenclを使用)を作成する場合、作業をいわゆるスレッドのブロックのグリッド(cuda用語)に分散します。すべてのgpuコアをビジー状態に保つために、これらすべてのスレッドを(32スレッドの「ワープ」で)スケジュールするのはgpu次第です。あなたがこの主題にどれほど精通しているかはわかりませんが、 this 紹介は興味深い読み物かもしれません。例では、これが使用率にどのように関連するかを説明しています。 gpuがアイドル状態で、シングルスレッドブロックに対してのみカーネルを起動するアプリケーションを起動するとしますが、このブロック内で十分な計算が行われます。 gpuは、gpu上のストリーミングマルチプロセッサ(sm = 128コアのグループ)にスレッドブロックをスケジュールします。たとえば、20個のsmを備えたnvidia gtx 1080の場合、使用率は(1/20 * 100%)= 5%になります。gpuコンピューティングのこの基本的な知識を前提として、 nvidia visual profiler (cudaアプリケーションの場合)またはcodexl(openclアプリケーションの場合)を介して実行すると、アプリケーションが使用するカーネルのスレッド構成を確認できますgpuの利用について推論する。しかし、それだけではありません。このツールは、gpuが実行している操作の種類(および効率)を正確に確認するために非常に役立ちます。