В .CU файл я попытался следующие действия в глобальном масштабе (т.е. не в функции):Как определить константу устройства CUDA, как C++ const/constexpr?
__device__ static const double cdInf = HUGE_VAL/4;
И получил NVCC ошибку:
error : dynamic initialization is not supported for __device__, __constant__ and __shared__ variables.
Как определить C++ сопзЬ/constexpr на устройстве, если это возможно?
ПРИМЕЧАНИЕ 1: #define
не может быть рассмотрено не только по эстетическим соображениям, но и потому, что на практике выражение более сложное и включает в себя внутренний тип данных, а не только двойной. Поэтому вызов конструктора каждый раз в каждом потоке CUDA будет слишком дорогостоящим.
ПРИМЕЧАНИЕ 2. Я сомневаюсь в производительности __constant__
, потому что это не константа времени компиляции, а скорее переменная, написанная с cudaMemcpyToSymbol
.
Возможный дубликат [Использование констант с CUDA] (http://stackoverflow.com/questions/16119923/using-constants-with-cuda) –
@ms, этот вопрос ограничивает область действия '__constant__' и' #define '. Разве нет возможности использовать константу C++ на устройстве, как предлагает мой фрагмент кода? –
@SergeRogatch: Вам действительно нужно, чтобы это была доступная переменная на устройстве во время работы с адресом и всем остальным? Потому что есть другие альтернативы просто '# DEFINE' и 'const'. Если вы ответите «нет», я отправлю пару в качестве ответа ... – einpoklum