*更多测试显示CPU的RAM慢度与CUDA无关。事实证明,Func2(CPU)是CPU密集型的,但不是内存密集型的,那么对于我的program1来说,内存压力就不如占用CPU的Func2。对于程序2(GPU),作为FUNC2变得非常快的GPU,FUNC1占用CPU和内存放了很多的压力,导致FUNC1的缓慢*CUDA API会影响CPU的RAM访问性能吗?
短版:如果我在同一台服务器上运行20个进程同时,我注意到,CPU的运行速度要慢得多,当GPU参与(与纯CPU处理)
龙版本:
我的服务器:赢Server 2012中,48个内核(超线程从24),192 GB的RAM(20进程将只使用〜40GB),4个K40卡片
我的程序1(CPU版本):
For 30 iterations:
Func1(CPU): 6s (lot's CPU memory access)
Func2(CPU): 60s (lot's CPU memory access)
我的程序2(GPU版本,用于FUNC1 CPU核心,并K40S为FUNC2):
//1 K40 will hold 5 contexts at the same time, till end of the 30 iterations
cudaSetDevice //very slow, can be few seconds
cudaMalloc ~1GB //can be another few seconds
For 30 iterations:
Func1(CPU): 6s
Func2(GPU), 1s (60X speedup) //share GPU via named_mutex
如果我运行20程序1(CPU)在一起,我注意到FUNC1的6S变12S平均
虽然20程序2(GPU),FUNC1需要〜42S来完成,而我FUNC2(GPU)仍然〜1秒(这1S包括锁定GPU,一些cudaMemcpy &内核调用。我认为这也包括GPU上下文切换)。因此,似乎GPU自己的表现并没有太大的影响,而CPU确实(通过GPU)
所以我怀疑cudaSetDevice/cudaMalloc/cudaMemcpy正在影响CPU的RAM访问?如果确实如此,则使用多核CPU & GPU的并行化将受到影响。 谢谢。
我不明白为什么会有投票。请解释你的理由来帮助我改进,谢谢。 –