cudaMalloc
在 CUDA 4.x 上,第一次调用可能非常慢(这被报告了好几次),这似乎是 CUDA 驱动程序中的一个错误,这已经不是什么秘密了。
最近,我注意到奇怪的行为:运行时间cudaMalloc
直接取决于我链接到我的程序的第 3 方 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,所以它不是由一些库初始化例程引起的..
我想知道是否有人对此有合理的解释?