问题:
随着我增加循环内部处理的数据量,CUDA kernel它会导致应用程序中止!
例外:
ManagedCuda.CudaException:'ErrorLaunchFailed:执行内核时设备上发生了异常。常见原因包括取消引用无效的设备指针和访问共享内存超出范围。
问题:
如果有人能阐明我当前实施中遇到的限制以及导致应用崩溃的确切原因,我将不胜感激。
另外,我附有完整的内核代码,以备不时之需,如果有人能说出在不引发异常的情况下如何以这种方式对其进行重新建模。这个想法是内核接受combinations(然后data在一个循环中)对同一组进行计算。因此,内部的循环计算应是顺序的。内核本身执行的顺序无关紧要。这是组合问题。
任何意见的欢迎。
代码(简短版本,足以终止应用程序):
extern "C"
{
__device__ __constant__ int arraySize;
__global__ void myKernel(
unsigned char* __restrict__ output,
const int* __restrict__ in1,
const int* __restrict__ in2,
const double* __restrict__ in3,
const unsigned char* __restrict__ in4)
{
for (int row = 0; row < arraySize; row++)
{
// looping over sequential data.
}
}
}
在上面的示例中,如果arraySize接近50_000,则该应用开始中止。与同类型的输入参数,如果我们覆盖或铁杆的arraySize到10_000然后代码完成成功。
相关分类