2016-09-27 46 views
2

我注意到,當我配置Theano使用GPU,並運行一些腳本,該CPU是使用〜100%:Theano在配置爲使用GPU時是否實際使用了100%的CPU?

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限制,操作系統也會始終顯示100%的CPU使用率。

設置gpuarray.sched=multi標誌會導致CPU線程在等待GPU完成計算時進入睡眠狀態。您可以使用它來檢查您的程序是否實際上是CPU或GPU綁定的。喚醒需要一點時間,但是在等待GPU時,您的CPU可用於其他進程。

請注意,ps顯示了進程整個生命週期中的CPU使用情況。因此,如果您的程序在使用Theano之前首先在CPU上執行某些操作,則顯示的CPU使用率會很高。您可以使用top -p <PID>獲取當前值。