众所周知,在CUDA 4.x上,对cudaMalloc
的第一次调用可能会非常慢(已经有人多次报告了),这似乎是CUDA驱动程序中的一个错误。
最近我注意到一些奇怪的行为: cudaMalloc
的运行时间直接取决于我将多少第三方CUDA库链接到我的程序中
(请注意,我不使用这些库,只是将我的程序与它们链接)
我使用以下程序进行了一些测试:
int main() {
cudaSetDevice(0);
unsigned int *ptr = 0;
cudaMalloc((void **)&ptr, 2000000 * sizeof(unsigned int));
cudaFree(ptr);
return 1;
}
以下是结果:
链接: -lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand 运行时间: 5.852449
链接: -lcudart -lnpp -lcufft -lcublas 运行时间: 1.425120
链接: -lcudart -lnpp -lcufft 运行时间: 0.905424
链接: -lcudart 运行时间: 0.394558
根据 'gdb' ,时间确实用在了 cudaMalloc 上,因此不是由某些库初始化例程引起的。
我想知道是否有人能对此做出合理的解释?