Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: KiarashОтветов: 1

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

Моя проблема связана с 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

compiler-errorscuda

Ответы

Ответ 1 · рейтинг 1 · harrism

Если вы используете графический процессор 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.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы