2016-09-27 1 views
2

私はGPUを使用して、いくつかのスクリプトを実行するTheanoを設定する際に、CPUは〜100%使用されていることに気づい:GPUを使用するように設定されている場合、Theanoは実際にCPUの100%を使用しますか?

PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND 
5927 jjjjjj 20 0 0.259t 0.025t 83228 R 100.2 20.2 33025:42 python 
8259 jjjjjj 20 0 0.239t 5.303g 102876 R 100.2 4.2 8209:45 python 
7791 jjjjjj 20 0 0.239t 5.086g 102872 R 99.8 4.0 8209:36 python 
7761 jjjjjj 20 0 0.239t 5.193g 104604 R 99.5 4.1 7267:47 python 

これは、CPUがボトルネックであることを意味するのでしょうか?つまり、CPUをCPUの周波数を高いものに置き換えると、スクリプトはより高速に実行されると私は推測すべきでしょうか?あるいは、ボトルネックが他の場所にあり、CPUが積極的に待っている可能性がありますか?どちらも可能性がある場合は、どれがボトルネックであるかをどのように知ることができますか?ここで

nvidia-smiの出力です:

Tue Sep 27 13:55:13 2016 
+------------------------------------------------------+ 
| NVIDIA-SMI 352.63  Driver Version: 352.63   | 
|-------------------------------+----------------------+----------------------+ 
| GPU Name  Persistence-M| Bus-Id  Disp.A | Volatile Uncorr. ECC | 
| Fan Temp Perf Pwr:Usage/Cap|   Memory-Usage | GPU-Util Compute M. | 
|===============================+======================+======================| 
| 0 GeForce GTX TIT... Off | 0000:02:00.0  Off |     N/A | 
| 32% 73C P2 95W/250W | 207MiB/12287MiB |  45%  Default | 
+-------------------------------+----------------------+----------------------+ 
| 1 GeForce GTX TIT... Off | 0000:03:00.0  Off |     N/A | 
| 32% 72C P2 94W/250W | 182MiB/12287MiB |  40%  Default | 
+-------------------------------+----------------------+----------------------+ 
| 2 GeForce GTX TIT... Off | 0000:82:00.0  Off |     N/A | 
| 33% 73C P2 93W/250W | 207MiB/12287MiB |  43%  Default | 
+-------------------------------+----------------------+----------------------+ 
| 3 GeForce GTX TIT... Off | 0000:83:00.0  Off |     N/A | 
| 42% 81C P2 148W/250W | 11872MiB/12287MiB |  79%  Default | 
+-------------------------------+----------------------+----------------------+ 

+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| 0  8259 C python           157MiB | 
| 1  7791 C python           157MiB | 
| 2  7761 C python           157MiB | 
| 3  5927 C python          11847MiB | 
+-----------------------------------------------------------------------------+ 

答えて

0

Theanoは、操作が完了するための関数呼び出しが待機しないことを意味し、非同期ですべてのGPUの操作を実行します。ホストとGPU間でデータを転送する前に、同期が必要です。デフォルトでは、ビジーなループでGPUをポーリングすることによって同期が実行されます。したがって、プログラムがGPUにバインドされていても、オペレーティングシステムは常にCPU使用率を100%表示します。

gpuarray.sched=multiフラグを設定すると、CPUスレッドは、GPUがコンピューティングを終了するのを待ってスリープ状態になります。これを使用して、プログラムが実際にCPUまたはGPUにバインドされているかどうかを確認できます。目を覚ますにはもう少し時間がかかりますが、GPUを待っている間は他のプロセスでCPUを使用できます。

psは、プロセスの全ライフタイム中のCPU使用率を示します。したがって、Theanoを使用する前にプログラムがCPU上で何かを最初に実行した場合、表示されるCPU使用率は高くなります。 top -p <PID>を使用して現在の値を取得できます。

関連する問題