2012-03-01 6 views
0

Я использую GeForce 9800 GX2. Я установил драйвера и CUDA SDK я написал простую программу, которые выглядят S так:Ядро CUDA не запускается

__global__ void myKernel(int *d_a) 
{ 
    int tx=threadIdx.x; 
    d_a[tx]+=1; 
    cuPrintf("Hello, world from the device!\n"); 


} 
int main() 
{ 
    int *a=(int*)malloc(sizeof(int)*10); 
    int *d_a; 
    int i; 
    for(i=0;i<10;i++) 
     a[i]=i; 
    cudaPrintfInit(); 
    cudaMalloc((void**)&d_a,10*sizeof(int)); 
    cudaMemcpy(d_a,a,10*sizeof(int),cudaMemcpyHostToDevice); 
    myKernel<<<1,10>>>(d_a); 
    cudaPrintfDisplay(stdout, true); 
    cudaMemcpy(a,d_a,10*sizeof(int),cudaMemcpyDeviceToHost); 

    cudaPrintfEnd(); 
    cudaFree(d_a); 
} 

код компилирует правильно, но ядро, похоже, не будет запускать ... сообщение не печатаются со стороны ядра. Что я должен сделать, чтобы решить эту проблему?

+4

Вы можете начать с добавления проверки ошибок. Каждый из этих вызовов API возвращает статус. Вы должны проверить каждый из них, чтобы узнать, какая ошибка сообщается и где она происходит. – talonmies

+0

Кроме того, вы использовали код образца SDK, верно? Linux или Windows? Скомпилировать и работать образцы SDK? Все они? – Patrick87

+0

Я попытался установить API для определения ошибки во время выполнения, но он показывает 'никакого устройства с поддержкой CUDA обнаружено в simple_device_call.cu по строке 30' ... я использую код примера linux и SDL, также не работает –

ответ

1

Учитывая, что в ваших комментариях вы говорите, что получаете «Устройство, поддерживающее CUDA», это означает, что либо у вас нет графического процессора с поддержкой CUDA, либо у вас не установлен правильный драйвер. Учитывая, что вы говорите, что у вас есть оба, я предлагаю вам попробовать переустановить свой драйвер для проверки.

Некоторые другие примечания:

  1. Вы пытаетесь сделать это через удаленный рабочий стол? Это не сработает, поскольку с RDP Microsoft использует фиктивное устройство отображения для удаленного перенаправления дисплея, поддержка графических процессоров Tesla TCC, которая позволяет RDP работать, заставляя GPU вести себя как не-дисплейное устройство, но с графическими процессорами, такими как Geforce это невозможно. Либо запустите консоль или войдите в консоль и используйте VNC.
  2. Также попробуйте запустить образец кода устройстваQuery SDK, чтобы убедиться, что он правильно определяет ваш графический процессор и версию драйвера/исполнения.
  3. Вы должны проверить все вызовы API CUDA на наличие ошибок.
  4. Звоните cudaDeviceSynchronize() до cudaPrintfDisplay().
Смежные вопросы