我在程序里面用了异步数据拷贝,为KERNEL函数准备数据。在模拟器下都正常运行,而且数据拷贝都正确。但是在DEBUG下面程序运行到数据拷贝函数,就直接异常结束
实在不明白为什么。
…
cudaStream_t stream[STREAMNUM];
for (int i = 0; i < STREAMNUM; i++)
{
cudaStreamCreate(&stream[i]);
}
for (int i = 0; i < 3; i++)
{
CUDA_SAFE_CALL(cudaMemcpy2DAsync(p_dMatA + i * iMatAOffset, sizeof(int) * MATASIZEW, p_hMatA + i * iMatAOffset,
sizeof(int) * MATASIZEW, sizeof(int) * MATASIZEW, MATASIZEH * 3 * STREAMNUM , cudaMemcpyHostToDevice, stream[i]));
}
…
如果我用一般的数据拷贝函数,cudaMemcpy2D,程序也没问题,最后计算结果也正确。
到底是什么问题啊??????
呵呵!能否说一下你的卡和出错信息?对了插入代码时,用插入代码标志。
出错信息如下
First-chance exception at 0x7c812aeb in simpleTemplates.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0012fc44…
The thread ‘Win32 Thread’ (0x4ec) has exited with code 1 (0x1).
The program ‘[3928] simpleTemplates.exe: Native’ has exited with code 1 (0x1).
另外,我试了试,如果对p_hMatA 用PINNED MEMORY来分配,第一次循环的时候没有问题,但是第二次循环还是不行,程序还是要异常结束
我很仔细检查了参数,没有问题啊。在模拟器下都可以运行,而且到后面KERNEL函数,传进来的数据都正确的
而且,我就是异步拷贝才出现问题,我用一般的拷贝函数cudaMemcpy2D都没有任何问题
你不是分配的分页锁定的存储器?必须要的,还有就是分页锁定的话,对系统内存的数量有要求
我后来改成了PINNED MEMORY,但是循环里面执行了一次就还是出现异常了。还是不行
system
2010 年3 月 18 日 09:06
10
我的卡是GTX285,我感觉那么点数据应该没问题吧