为什么第一个cudaMalloc需要这么多时间和内存?

时间:2013-05-14 21:56:34

标签: memory cuda gpgpu

例如

int *p;
cudaMalloc(&p, sizeof(int));

将花费大约20秒,我的进程通常会在任务管理器的内存使用量中获得650MB +(但总量稍微不同)。 GPU-Z也表示我的GPU上专用内存使用量增加了200MB +。

  • 仅在第一次调用cudaMalloc
  • 时发生
  • 如果我之前调用其他CUDA函数无关紧要,例如cudaGetDevice
  • 在其他一些CUDA项目中没有发生

我正在使用

  • Thrust,CUBLAS,cuRAND图书馆
  • MSVC 2010 with NVCC
  • 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);的单独调用 - 不知道为什么......

0 个答案:

没有答案