nisht调试时,核函数显示线程访问冲突

  • 17 replies
  • 1358 views
Re: nisht调试时,核函数显示线程访问冲突
« 回复 #15 于: 十一月 04, 2019, 06:42:53 pm »
楼主你好,你的附件中的代码不能通过编译(主要缺少相应的数据结构,读取文件相关的函数,相应的数据类型,以及,缺少相应的其他kernel)。我们做了一下修改,以让它通过编译,能上自动化的工具测试:
程序代码: [选择]
#define  FilterSize 25
__global__ void deviceGaussConvDown_5x5_32f_C1R(float *pSrc, float *pDst, float *kernel, int radius)
{
 int kernelW = radius * 2 + 1;
 int cols = 3072;
 int rows = 3072;
 int index = blockIdx.x * blockDim.x + threadIdx.x;
 int stride = blockDim.x * gridDim.x;

 for (int idx = index; idx < cols * rows; idx += stride)
 {
  int v = static_cast<int>(idx / cols);
  int u = static_cast<int>(idx - cols * v);
  if (v >= 0 && v < rows && u >= 0 && u < cols)
  {   
   float temp = 0.0f;
   for (int kRows = 0; kRows < kernelW; kRows++)
   {
    for (int kCols = 0; kCols < kernelW; kCols++)
    {
     int inputIdx = min(max((u + kCols - radius) + cols * (v + kRows - radius), 0), cols * rows - 1);
     float pixel = pSrc[inputIdx];
     unsigned int kernelIdx = kRows * kernelW + kCols;
     float weight = kernel[kernelIdx] * (1.0 / 256.0);
     temp = pixel * weight;
     //temp += weight;
    }
   }
   pDst[v * 3072 + u] = temp;
   //pDst[v * dstSize.width + u] = pSrc[idx]*kernel[0];
  }
 }
}

int main()
{
 dim3 block(1024);
 dim3 grid(1024);
 int radius = 2;

 float* dev_pDst;
 cudaMalloc((void**)&dev_pDst, 3072 * 3072 * sizeof(float));

 float* gaussKernel;
 cudaMalloc((void**)&gaussKernel, FilterSize * sizeof(float));
 
 float *pTempImage;
 cudaMalloc((void**)&pTempImage, 3072 * 3072 * sizeof(float));
 deviceGaussConvDown_5x5_32f_C1R << <grid, block >> > (dev_pDst, pTempImage, gaussKernel, radius);

 cudaDeviceSynchronize();
 return 0;
}


然后这段代码工具没有报告任何错误(包括API错误跟踪),和任何类型的访存错误。

请确保您提供了正确的信息(这样折腾一番不好玩的,谢谢)。

非常抱歉,代码确实存在一些自定义结构等所以无法编译成功,同时我也完全没有想折腾你的意思,我把相同的代码放另外一台机器上运行没有任何错误,我在这个回复之前先一步回复了你:可能是我的cuda版本或者显卡驱动等方面出现了问题(我的cuda版本和显卡驱动似乎有点陈旧)。我之前没有往这方面思考过,浪费了不少时间,我明天会尝试重装以解决问题并向你反馈结果,非常感谢你的帮助。

Re: nisht调试时,核函数显示线程访问冲突
« 回复 #16 于: 十一月 04, 2019, 06:59:05 pm »
非常抱歉,代码确实存在一些自定义结构等所以无法编译成功,同时我也完全没有想折腾你的意思,我把相同的代码放另外一台机器上运行没有任何错误,我在这个回复之前先一步回复了你:可能是我的cuda版本或者显卡驱动等方面出现了问题(我的cuda版本和显卡驱动似乎有点陈旧)。我之前没有往这方面思考过,浪费了不少时间,我明天会尝试重装以解决问题并向你反馈结果,非常感谢你的帮助。

没事。等待你的回复了。
(以及,我这些年来从来没有遭遇过因为CUDA版本或者显卡驱动版本陈旧,而导致的报告访存错误的情况)

Re: nisht调试时,核函数显示线程访问冲突
« 回复 #17 于: 十一月 05, 2019, 07:56:49 pm »
没事。等待你的回复了。
(以及,我这些年来从来没有遭遇过因为CUDA版本或者显卡驱动版本陈旧,而导致的报告访存错误的情况)

今天我卸载了cuda及显卡驱动,然后下载并安装cuda10.0(还有cuda9.2),依然调试之前发给你的代码,发现并不会出现调试错误,但调试的时间看起来比另一台电脑要慢,但是我的电脑显卡以及cuda版本都是比它要好要新的。随后我测试了一段基于NPP库的代码(见附件),发现仍然会出现错误,而这在另一台电脑并不会出现错误。两台电脑差异:我的win7 64 cuda10.0,另一台win10 64 cuda9.2。不知道是不是系统或者硬件出了问题,或者软件配置。