Я работаю над приложением для обработки чисел, используя платформу 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 компилируют его).
У кого-нибудь есть здесь советы по дизайну?
Обновление: Смотрите комментарии