CUDA постоянные символы памяти
Я использую CUDA 5.0 и у меня есть модули, которые скомпилированы отдельно. Я хотел бы получить доступ к одному и тому же значению в постоянной памяти из всех модулей. Проблема заключается в следующем: когда я определяю символ в каждом модуле, компоновщик утверждает, что символ был переопределен. Есть ли обходной путь или решение этой проблемы? Спасибо за помощь.
1 ответ
В отдельном режиме компиляции CUDA существует настоящий компоновщик, и каждый символ, который связан с бинарной полезной нагрузкой конечного устройства, будет определен однозначно. Это означает, что __constant__ символы памяти должны быть определены только в одном месте во всем коде, который связан вместе.
Решение, вероятно, состоит в том, чтобы объявить символ как extern
в каждой области перевода единицы, кроме одной, которая содержит определение символа. Обратите внимание, что это единственный случай, когда допустимо использовать extern с символами __constant__, иначе они неявно статичны. Существует общее обсуждение отдельной модели компиляции, которая описывает этот сценарий, скрытый в документации (как руководство по программированию, так и руководство nvcc IIRC).