0

我正在使用以下代码来计算 C++ coce 中的时间

SYSTEMTIME sm;
FILETIME fm;

GetSystemTime(&sm);
SystemTimeToFileTime(&sm,&fm);

*time =  (double)(fm.dwLowDateTime / 10000000.0);

现在我想计算当我实现 CUDA 版本时,这个函数在 CUDA 内核函数之间被调用。任何想法或帮助我如何做到这一点。我对 cuda 编程很陌生,对它了解不多。也有人能告诉我如何在__device__我尝试过的函数中使用 new 运算符

maxY = new int[m_imgWidth*m_imgHeight]; 

cudaMalloc((void **)&m_labelBuf , m_imgWidth*m_imgHeight);

但它给了我错误

 calling a __host__ function("cudaMalloc") from a __global__ function("kernel_Labeling") is not allowed
4

1 回答 1

1

您可以通过寄存器(每个线程私有)和共享内存(每个块私有)进行一些动态或伪动态内存分配,但看起来这不是您想要做的。

要从设备端代码在堆上分配内存,可以使用 C++ new 运算符,也可以使用设备端 malloc。这仅适用于 Fermi 和更新的 GPU。

使用cudaEvent API是计时 cuda 代码最无故障的方法。

编辑: 我已将 Robert Crovella 的评论合并到这个答案中。如果他发布他的评论作为答案,请投票给他而不是这个。

于 2012-12-31T04:02:25.930 回答