Использование openMP в коде хоста cuda?

Можно ли использовать openMP-прагмы в CUDA файлах (не в коде ядра)?

Я буду комбинировать вычисления gpu и cpu. Но компилятор nvvc терпит неудачу с "не может найти неизвестную опцию" openmp ", если я связываю porgram с опцией openmp (под linux)

Взаимодействие заключается в использовании openMP-statments только в файлах c/С++.

Ответ 1

Я только что нашел это

http://www.cse.buffalo.edu/faculty/miller/Courses/CSE710/heavner.pdf

Page 25 говорит:

С gcc: - # включить omp.h

Добавьте флаг -fopenmp

С nvcc это должно быть -Xcompiler -fopenmp, поскольку это нужно передать непосредственно gcc -Xcompiler передает флаги непосредственно компилятору хоста

Добавьте флаг -lgomp во время этапа компоновки.

Я еще не пробовал...

Ответ 2

Я попытался записать параметр в "Дополнительные параметры компилятора", но это не сработало.

Что я сделал для Visual Studio 2010 и CUDA 4.2:

В свойствах проекта → Свойства конфигурации → CUDA C/С++ → Командная строка → Дополнительные параметры: -Xcompiler "/openmp"

Это привело к двум параметрам -Xcompiler в результирующей команде сборки, но не вызвало проблем и не сработало успешно.

Ответ 3

Решение для Visual Studio, найденное на форуме nvidia:

добавьте флаг '/openmp' в опции Extra С++ в правилах сборки cuda. Я попробую linux-решение позже.