我的程序分析了一个视频文件,它被表示为一个3d数组并且从LabView发送到我的程序。 LabView已经将这个3d数组变成了一个1d数组,所以我刚刚在CUDA中分配一个1d数组,使用cudaMalloc并使用cudaMemcpy来复制数据。但是我注意到,如果我发送超过2XXX,120x240像素图像,我从我的一些cuda内存函数(cudamemcpy和cudafree,稍后在我的程序中发生一些内核被调用后)中收到“未知错误”,以及这些最终会破坏我的计划。但是,如果我降低数量,如果我发送的图像,我没有问题。这让我相信我的代码很好,但是我的内存分配实践很糟糕。当发送非常大的阵列时,Cuda记忆功能给出“未知错误”
首先,让我们来谈谈Pitched的记忆。据我所知,这是所有关于选择一个好的大小来分配内存,以便线性数据不会分成两个块。这对于2D和3D阵列尤其常见,因为您希望将行或列放在内存中以便快速访问。
如果我不使用倾斜内存,会发生这些问题吗?不使用倾斜内存时会发生什么样的错误,特别是对于这些非常大的数组?到目前为止,我忽略了使用cudaMallocPitch和cudaMalloc3d的选项,尽管我在技术上有2d和3d数组,我已经放平了。
最后,当cudaGetLastError只告诉我“未知错误”时,如何进一步调试我的代码问题?我能够找到哪个函数存在错误,但是当它像cudaFree一样时,我无法调试这种东西,或者找出问题的起源地。
无论如何,感谢您的帮助。