CUDA в сочетании с OpenMP

Я видел несколько тем по этому вопросу, но они, похоже, не связаны с моей проблемой.

У меня есть мой код CUDA, который работает, но я хочу распараллелить циклы for, которые работают асинхронно с кодом ядра (и после того, как ядро ​​завершится).

Кажется, у меня проблема со связыванием … ошибки как таковые.

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘omp_get_num_threads’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘Omp_get_thread_num’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘GOMP_barrier’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘GOMP_single_start’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘GOMP_critical_start’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘GOMP_critical_end’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘__Gxx_personality_v0’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘GOMP_parallel_start’

…/lib/liblalinference.so: ошибка: неопределенная ссылка на
‘GOMP_parallel_end’

Во-первых, я хотел бы отметить, что раньше у меня была работа с opemMP, но в отдельном разделе, где я скомпилировал код C с

CFLAGS = -g -O2 *many flags here* -fopenmp

Все остальное — посторонняя информация, важной частью является то, что мне просто нужно было добавить -fopenmp к строке флага в make-файле.

Тем не менее, поскольку CUDA все сложное и такое с использованием nvcc, который использует компилятор c ++ в качестве своей основы (верно?), Я, кажется, в растерянности. Когда я добавляю -fopenmp к

CPPFLAGS =  ... *many cuda flags* -fopenmp

Я получаю указанные ошибки выше.

Я даже пытался

CPPFLAGS =  ... *many cuda flags* -fopenmp -lgomp

Также отмечается, что когда я настраиваю свой проект, флаги GCC отключаются, когда включена CUDA.

Куда я иду не так? Нужно ли ставить флаг (ы) в другом месте? Нужно ли сдаваться?

2

Решение

Я узнал, что это сработало, когда я сделал следующее.

NVCC флаги -Xcompiler -fopenmp -fgomp файловые материалы

Благодаря Тудору

5

Другие решения

Других решений пока нет …