#define и CUDA - PullRequest
       37

#define и CUDA

3 голосов
/ 06 марта 2011

Почему следующий фрагмент не работает с CUDA (как 3.2, так и 4.0)?

#define NUM_BLOCKS 16

// lots of code.

dim3 dimBlock(NUM_BLOCKS, NUM_BLOCKS);

, но это

dim3 dimBlock(16, 16);

работает?

Я продолжаюполучая error : expected a ")" и error : expected an expression.Чего мне не хватает?

Ответы [ 3 ]

8 голосов
/ 06 марта 2011

Вы уверены, что не написали

#define NUM_BLOCKS 16;

(обратите внимание на точку с запятой в конце)?

Я получаю именно те ошибки, которые вы описали, когда есть точка с запятой erroneus.

2 голосов
/ 06 марта 2011

Это странно.Это может быть из-за обычной проблемы с макросами.Если вы знаете, макросы не относятся к области действия.Возможно, что этот макрос определен в другом месте, но по-разному.

Почему бы вам не использовать const int или enum вместо макроса?

Знаете ли вы это: C ++ - enum против const против # define ??

1 голос
/ 06 марта 2011

Один из способов выяснить это - остановить драйвер компилятора после этапа предварительной обработки, чтобы вы могли увидеть, что было сгенерировано. Это покажет вам, что подставил препроцессор, и, следовательно, даст вам что-то для поиска.

Опция -E, если вы используете gcc и / E для MSVC.

Для драйвера компилятора nvcc типичная команда будет

nvcc -E file.cu -o file.cup
...