【发布时间】:2016-02-03 09:48:42
【问题描述】:
* 更多测试表明 CPU 的 Ram 速度慢与 CUDA 无关。事实证明 Func2(CPU) 是 CPU 密集型但不是内存密集型,那么对于我的程序 1,内存压力较小,因为它是 Func2 占用 CPU。对于program2(GPU),由于Func2在GPU上变得非常快,Func1占用CPU并对内存造成很大压力,导致Func1变慢*
短版:如果我在同一台服务器上同时运行 20 个进程,我注意到当涉及 GPU 时 CPU 的运行速度要慢得多(与纯 CPU 进程相比)
长版:
我的服务器:Win Server 2012,48 个内核(24 个超线程),192 GB 内存(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 内核,Func2 使用 K40s):
//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 个 program1(CPU),我注意到 Func1 的 6s 平均变成了 12s
虽然对于 20 个 program2(GPU),Func1 需要 ~42s 才能完成,而我的 Func2(GPU) 仍然是 ~1s(这 1s 包括锁定 GPU、一些 cudaMemcpy 和内核调用。我假设这也包括 GPU 上下文切换)。所以看起来GPU自身的性能并没有受到太大影响,而CPU却(通过GPU)
所以我怀疑 cudaSetDevice/cudaMalloc/cudaMemcpy 正在影响 CPU 的 Ram 访问?如果是真的,同时使用多核 CPU 和 GPU 的并行化将受到影响。 谢谢。
【问题讨论】:
-
我不明白为什么会有反对票。请解释您帮助我改进的原因,谢谢。
标签: c++ performance memory cuda