Создайте .cu файл, который использует boost - PullRequest
0 голосов
/ 25 сентября 2019

Я запустил следующую команду:

nvcc -arch=sm_70 foo.cu -o predatorPrey -I $BOOST_ROOT -L $BOOST_LIBRARY_PATH -lboost_timer

И получил следующую ошибку компиляции:

boost/include/boost/core/noncopyable.hpp(42): error: defaulted default constructor cannot be constexpr because the corresponding implicitly declared default constructor would not be constexpr

Поиск в Google привел меня здесь .

Вся надежда казалась потерянной, пока этот парень не использовал обходной путь.Хотя, как младший программист, я не понимаю, что он имеет в виду под

Встроенный буст из исходного кода с g ++ 11 open решил проблему

Означает ли этовосстановление ускорения с нуля?Чем он отличается от создания Boost по умолчанию?

Итак, каковы же обходные пути для использования обоих и CUDA в одном проекте?

1 Ответ

2 голосов
/ 25 сентября 2019

Для использования хост-кода:

Единственный общий обходной путь с высокой вероятностью успеха при создании сторонней библиотеки с помощью цепочки инструментов CUDA - это организовать ваш проект таким образом, чтобысторонний код находится в файле, который заканчивается на .cpp и обрабатывается компилятором хоста (например, g ++ в linux, cl.exe в windows).

Ваш код CUDA (например, ядра и т. Д.) Должен находиться в файлах с именами файлов, заканчивающимися на .cu (для стандартного режима обработки).

Если вам нужно использовать этот сторонний код/ библиотеки функций в ваших функциях, которые находятся в файле .cu, вам нужно будет встроить функции оболочки в ваши файлы .cpp, чтобы обеспечить необходимое поведение в качестве вызываемых функций, а затем вызывать эти функции оболочки по мере необходимости из вашего файла .cu(s).

Свяжите все это вместе на уровне проекта.

Возможно, что при анализе конкретной проблемы могут быть использованы другие подходы.Например, иногда обновление до последней версии сторонней библиотеки и / или версии CUDA может решить проблему.

Для использования в коде устройства:

Тамнет общего подхода совместимости.Если вы ожидаете, что какое-то поведение будет использоваться в коде устройства, и вы столкнетесь с ошибкой компиляции, подобной этой, вам нужно будет конкретно решить эту проблему.

По-прежнему могут применяться общие рекомендации, такие как обновление до последней версии сторонней библиотеки, которую вы используете, и / или до последней версии CUDA.

...