Я работаю над приложением для обработки чисел, используя платформу CUDA. У меня есть некоторые статические данные, которые должны быть доступны для всех потоков, поэтому я поместил их в постоянную память следующим образом:
__device__ __constant__ CaseParams deviceCaseParams;
Я использую вызов cudaMemcpyToSymbol для передачи этих параметров с хоста на устройство:
void copyMetaData(CaseParams* caseParams)
{
cudaMemcpyToSymbol("deviceCaseParams", caseParams, sizeof(CaseParams));
}
который работает.
В любом случае, похоже (методом проб и ошибок, а также из чтения сообщений в сети), что по какой-то нездоровой причине объявление deviceCaseParams и его операция копирования (вызов cudaMemcpyToSymbol) должны находиться в том же файле . На данный момент у меня есть эти два в файле .cu, но я действительно хочу иметь структуру параметров в файле .cuh, чтобы любая реализация могла видеть его, если захочет. Это означает, что у меня также должна быть функция copyMetaData в файле заголовка, но это мешает связыванию (символ уже определен), поскольку оба файла .cpp и .cu включают этот заголовок (и, таким образом, компилятор MS C ++ и nvcc компилируют его. ).
Есть ли здесь у кого-нибудь советы по дизайну?
Обновление: См. Комментарии