我写了一个函数。当我在 cpu 中运行它时,我可以获得正确的结果。cpu代码部分是:
for(int x = startx; x < endx; x+=SampleStep)
for(int y = starty; y < endy; y+=SampleMin)
{
int idoff = Width;
然后我将它移植到 GPU,如下所示:
int x = threadIdx.x + blockIdx.x * blockDim.x + startx;
int y = threadIdx.y + blockIdx.y * blockDim.y + starty;
int idoff = blockDim.x * gridDim.x;
当我运行代码时,黑屏发生了,然后过了一会儿又恢复了。同时,系统显示如下信息:Display drive stopped responding
。
而cuda event time output cost time是0ms,结果是错误的。
for (int k = CircleBegin; k < CircleEnd; k++)
{
bool Isright = (k-ww>=0) && (k+ww<Width);
if (Isright)
{
float AverR = 0;
for (int i = -ww; i <= ww; i++)
{
for (int j = -wh; j <= wh; j++)
{
AverR += ImgR[(k+i)+(y+j)*idoff];
}
}
当我评论 AverR += ImgR[(k+i)+(y+j)*idoff]; 代码可以在没有黑屏的情况下运行。我想知道为什么。这与我的显示设备有关(我的设备是 nvida gt 240)还是发生了一些访问冲突?我该如何解决这个问题?