2016-06-21 3 views
-1

Я пытаюсь запустить mainSift.cpp от CudaSift на Nvidia Tesla M2090. Прежде всего, как объяснялось в this вопрос, мне пришлось изменить с sm_35 на sm_20CMakeLists.txt.CUDA неизвестна ошибка

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

Ошибка возникает из-за того, что вы запускаете код, который имеет функции, которые не поддерживаются на вашем графическом процессоре (объекты текстуры). Я немного удивлен, что компилятор не генерирует ошибку во время компиляции, но это другой вопрос.

Нет решения, кроме использования поддерживаемого оборудования или для перезаписи кода.

[Этот ответ собран из замечаний и добавил, как запись в сообщество вики, чтобы получить этот ответ выключить неразгаданной список для тега CUDA]

Смежные вопросы