我知道 CUDA 会在第一次 API 调用期间进行初始化,但是花费的时间太多了。即使在单独的 cudaSetDevice 之后
测试程序:
使用以下代码构建的相同程序:CUDA 7.0 (compute_35) + Visual Studio 2012 + NSight 4.5,然后在 2 台单独的机器上运行(无重建)
在第一个 cudaMalloc 之前,我称之为“cudaSetDevice”</p>
在我的电脑上:Win7 + Tesla K20,第一个 cudaMalloc 需要 150 毫秒
在我的服务器上:Win2012+ Tesla K40,需要1100ms!!
对于两台机器,后续的 cudaMalloc 都快得多。
我的问题是:
1、为什么K40第一个cudaMalloc需要更长的时间(1100ms vs 150ms)?因为K40应该比K20好
2、我以为“cudaSetDevice”可以捕获Init时间?例如来自 talonmies 的这个答案
3、如果初始化是不可避免的,进程A可以在GPU中保持其状态(或上下文)而进程B在同一个GPU中运行吗?我知道我最好在“独占”模式下运行 GPU,但可以处理“暂停”,以便以后不需要再次初始化 GPU?
提前致谢