【发布时间】:2012-05-31 09:15:35
【问题描述】:
我是 CUDA 的初学者,我正在尝试实现 Sobel Edge 检测内核。 我正在使用此代码,但它不起作用。 谁能告诉我它有什么问题。我只得到一些 -1 和一些非常大的值。
__global__ void EdgeDetect_Hor(int *gpu_Edge_Hor, int *gpu_P,
int *gpu_Hor, int W, int H)
{
int X = threadIdx.x;
int Y = threadIdx.y;
int sum = 0;
int k1, k2;
int min1, min2;
for (k1 = 0; k1 < 3; k1++)
for(k2 = 0; k2 <3;k2++)
sum += gpu_Hor[k1*3+k2]*gpu_P[(X-k1)*H+Y-k2];
gpu_Edge_Hor[X*H+Y] = sum/5000;
}
我这样称呼这个内核:
dim3 dimBlock(W,H);
dim3 dimGrid(1,1);
EdgeDetect_Hor<<<dimGrid, dimBlock>>>(gpu_Edge_Hor, gpu_P, gpu_Hor, W, H);
【问题讨论】:
-
谢谢我正在处理一个 480x720 帧的视频
-
您的内核永远不会运行,因为您拥有的块大小是非法的。有关块大小限制,请参阅 Cuda C 编程指南的附录 F。
-
以后,通过 Linux 上的 cuda-gdb 运行程序,即 cuda 调试器。您实际上不必通过猜测来编码。
标签: cuda convolution