Использование макросов для определения констант для CUDA - PullRequest
1 голос
/ 04 марта 2010

Я пытаюсь уменьшить количество инструкций и постоянных чтений памяти для ядра CUDA.

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

Вот пример:

#define TX 8
#define TY 6
#define TZ 4

#define TX2 (TX * 2)
#define TY2 (TY * 2)

#define OVER_TX (1.0f / float(TX))

Возможно, это уже имеет место (или, возможно, обрабатывается компилятором nvcc), но ясно, что я хочу, чтобы второй блок макросов оценивался препроцессором, а не заменялся в коде, чтобы он не выполнялся в каждом ядре. Есть предложения?

1 Ответ

2 голосов
/ 04 марта 2010

Современные компиляторы, как правило, будут оценивать такие константы во время компиляции, где это возможно, поэтому вы должны быть в порядке. Это также верно для правильно определенных констант (т. Е. С использованием const вместо метода "old skool" #define).

...