1

例如

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);- 不知道为什么......

4

0 回答 0