2016-06-21 117 views
-1

我试图在Nvidia Tesla M2090上从CudaSift运行mainSift.cpp。首先,正如this问题所解释的,我必须从sm_35更改为sm_20,CMakeLists.txtCUDA未知错误

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; 
} 

我读过已经this问题,似乎有几分相似,但我不明白解决方案意味着什么或如何使用它来解决我的问题。

为什么错误发生?

+0

你还没有问一个问题在这里。你想知道什么? – talonmies

+0

添加了一个简单的问题:为什么错误发生? – justHelloWorld

+1

纹理对象('cudaTextureObject_t')是Kepler功能,不适用于计算功能2.0。你需要使用纹理参考。代码中的更改可能并不简单。 – havogt

回答

2

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

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

[这个答案从评论组装并添加为社区维基条目得到这个答案关闭解答列表为CUDA标签]