我使用以下代码来计算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
答案 0 :(得分:1)
你可以通过寄存器(私有的每线程)和共享内存(私有的每个块)做一点动态或伪动态内存分配,但它看起来不像你正在尝试做的那样。
要从设备端代码在堆上分配内存,可以使用C ++ new运算符,也可以使用device-side malloc。这仅适用于Fermi和更新的GPU。
使用cudaEvent API是计算cuda代码最无故障的方法。
编辑: 我已将Robert Crovella的评论合并到这个答案中。如果他发表评论作为答案,请投票给他而不是这个。