相关疑难解决方法(0)

第一个cudaMalloc(K40 vs K20)的缓慢,即使在cudaSetDevice之后

我理解CUDA会在第一次API调用期间进行初始化,但花费的时间太多了.即使经过单独的cudaSetDevice

测试程序:

使用CUDA 7.0(compute_35)+ Visual Studio 2012 + NSight 4.5构建相同的程序,然后在2台单独的机器上运行(无需重建)

在第一个cudaMalloc之前,我称之为"cudaSetDevice"

在我的电脑上:Win7 + Tesla K20,第一节cudaMalloc需要150毫秒

在我的服务器上:Win2012 + Tesla K40,需要1100ms !!

对于这两台机器,后续的cudaMalloc要快得多.

我的问题是:

1,为什么K40需要更长的时间(1100ms vs 150ms)才能获得第一个cudaMalloc?因为K40应该比K20更好

2,我以为"cudaSetDevice"可以捕获Init时间吗?例如来自talonmies的答案

3,如果初始化是不可避免的,那么当进程B在同一GPU中运行时,进程A是否可以在GPU中保持其状态(或上下文)?我理解我最好在"独占"模式下运行GPU,但可以处理A"暂停",以便以后不需要再次初始化GPU?

提前致谢

c++ cuda tesla nsight

1
推荐指数
1
解决办法
406
查看次数

标签 统计

c++ ×1

cuda ×1

nsight ×1

tesla ×1