Объявление переменных cuda в заголовке, включенном в проект cpp - PullRequest
0 голосов
/ 05 мая 2020

У меня есть класс, содержащий несколько переменных, доступных только при компиляции с nvcc, например thrust::device_vector<>. Само объявление класса находится в заголовочном файле, его реализация - в .cu-файле. Этот класс должен быть включен в основной проект, который компилируется с использованием g++, что означает, что компиляция cuda-переменных также будет выполняться с использованием g++. Очевидно, это не удается. Поэтому мне было интересно, есть ли для этого решения, например, что мой класс содержит такие переменные, как thrust::device_vector<>, но все же может быть включен в полный проект?
Могу ли я как-то объявить переменные класса только в .cu-файле , но не в заголовочном файле?

1 Ответ

1 голос
/ 06 мая 2020

, что мой класс содержит такие переменные, как thrust::device_vector<>,, но все же может быть включен в полный проект?

Вы должны скомпилировать код, содержащий упор, с nv cc. Альтернативы нет. Если вы включите заголовки, которые включают в себя ванильный код C ++ 17 и скомпилируете с помощью компилятора C ++, вы получите ошибки.

Могу ли я каким-то образом объявить переменные класса только в .cu-файле, но не в заголовочном файле?

Вы можете это сделать, и это было бы очевидным решением. Но тогда возникает столь же очевидный вопрос, зачем вам вообще нужна структура в ванильном коде C ++ 17. И если намерение состоит в том, чтобы использовать его в коде C ++ 17, то вы вернулись туда, откуда начали.

Я не вижу альтернативы, кроме рефакторинга вашего кода. Вам либо нужно использовать наследование от общей переносимой структуры со специализациями C ++ и CUDA и каким-то образом скопировать конструкцию или подобное между ними, либо поместить в карантин / деформировать весь код C ++ 17 за пределами кодовых путей CUDA и использовать nv cc как ваш базовый компилятор и скомпилируйте C ++ 17 отдельно с помощью g ++.

Никакое волшебство не может решить эту проблему так, как вы, кажется, себе представляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...