CUDA, cuPrintf вызывает неуказанный сбой запуска?

У меня есть ядро, которое запускается дважды с разным размером сетки.

Моя проблема связана с cuPrintf. Когда у меня нет cudaPrintfInit() до запуска ядра и cudaPrintfDisplay(stdout, true) и cudaPrintfEnd() после запуска ядра, у меня нет ошибки, но когда я помещаю их туда, я получаю сообщение об ошибке «неопределенный сбой запуска».

В моем коде устройства есть только один такой цикл для печати:

if (threadIdx.x==0) {
     cuPrintf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y);
}

Я использую CUDA 4.0 с картой с возможностью cuda 2.0, поэтому я компилирую свой код с таким синтаксисом:

nvcc LB2.0.cu -arch=compute_20 -code=sm_20  

person Kiarash    schedule 03.07.2011    source источник


Ответы (1)


Если вы используете графический процессор CC 2.0, вам вообще не нужен cuPrintf — CUDA имеет встроенный printf для графических процессоров CC-2.0 и выше. Поэтому просто замените вызов cuPrintf следующим:

#if __CUDA_ARCH__ >= 200
if (threadIdx.x==0) {
    printf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y);
}
#endif

(Обратите внимание, что вам нужны строки #if / #endif только в том случае, если вы компилируете свой код для sm_20, а также для более ранних версий. С помощью приведенного вами примера командной строки компиляции вы можете их исключить.)

С printf вам не нужны cudaPrintfInit() или cudaPrintfDisplay() — это происходит автоматически. Однако, если вы печатаете много данных, вам может потребоваться увеличить размер FIFO printf по умолчанию с помощью cudaDeviceSetLimit(), передав параметр cudaLimitPrintfFifoSize.

person harrism    schedule 03.07.2011