繁体   English   中英

CUDA未知错误

[英]CUDA unknown error

我试图运行mainSift.cppCudaSift上了Nvidia的Tesla M2090。 首先,在解释这个问题,我不得不改变从sm_35sm_20CMakeLists.txt

Unfortunatley现在返回此错误:

checkMsg() CUDA error: LaplaceMulti() execution failed
 in file </ghome/rzhengac/Downloads/CudaSift/cudaSiftH.cu>, line 318 : unknown error.

这是LaplaceMulti代码:

double LaplaceMulti(cudaTextureObject_t texObj, CudaImage *results, float baseBlur, float diffScale, float initBlur)
{
  float kernel[12*16];
  float scale = baseBlur;
  for (int i=0;i<NUM_SCALES+3;i++) {
    float kernelSum = 0.0f;
    float var = scale*scale - initBlur*initBlur;
    for (int j=-LAPLACE_R;j<=LAPLACE_R;j++) {
      kernel[16*i+j+LAPLACE_R] = (float)expf(-(double)j*j/2.0/var);
      kernelSum += kernel[16*i+j+LAPLACE_R]; 
    }
    for (int j=-LAPLACE_R;j<=LAPLACE_R;j++) 
      kernel[16*i+j+LAPLACE_R] /= kernelSum;  
    scale *= diffScale;
  }
  safeCall(cudaMemcpyToSymbol(d_Kernel2, kernel, 12*16*sizeof(float)));
  int width = results[0].width;
  int pitch = results[0].pitch;
  int height = results[0].height;
  dim3 blocks(iDivUp(width+2*LAPLACE_R, LAPLACE_W), height);
  dim3 threads(LAPLACE_W+2*LAPLACE_R, LAPLACE_S); 
  LaplaceMulti<<<blocks, threads>>>(texObj, results[0].d_data, width, pitch, height);
  checkMsg("LaplaceMulti() execution failed\n");
  return 0.0; 
}

我已经读过这个看起来有些相似的问题,但是我不明白该解决方案的含义或如何将其用于我的问题。

为什么会发生错误?

发生错误是因为您正在运行的代码具有GPU(纹理对象)不支持的功能。 我对编译器在编译期间没有产生错误感到有些惊讶,但这是另一个问题。

除了使用受支持的硬件或重写代码外,没有其他解决方案。

[此答案由评论汇总而成,并添加为社区Wiki条目,以使该答案脱离CUDA标签的未答复列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM