例如
int *p;
cudaMalloc(&p, sizeof(int));
大约需要 20 秒,我的进程通常会在任务管理器中获得 650MB+(尽管总是略有不同)的内存使用量。GPU-Z还表明我的 GPU 上的专用内存使用量增加了 200MB 以上。
- 仅在第一次调用时发生
cudaMalloc
- 如果我在它之前调用其他 CUDA 函数也没关系,比如
cudaGetDevice
- 在其他一些 CUDA 项目中不会发生
我在用
- Thrust、CUBLAS、cuRAND 库
- 带有 NVCC 的 MSVC 2010
- Nsight 3.0
- CUDA 5.0
为什么会这样?可以做什么?
更新:
正如下面评论中提到的,这似乎源于初始化(调用cudaFree(0)
具有相同的效果)。但是,至于它为什么这么慢,可能与运行时错误有关 - 当初始化行被命中时,以下错误发生了 30 次:
First-chance exception at 0x74f0b727 in ...: Microsoft C++ exception: cudaError_enum at memory location 0x003ff9c4..
First-chance exception at 0x74f0b727 in ...: Microsoft C++ exception: cudaError_enum at memory location 0x003ff9c4..
First-chance exception at 0x74f0b727 in ...: Microsoft C++ exception: cudaError_enum at memory location 0x003ff9c4..
etc...
当我没有分配任何东西时,这种情况仍然会发生,比如一个单独的电话cudaFree(0);
- 不知道为什么......