Я видел несколько тем по этому вопросу, но они, похоже, не связаны с моей проблемой.
У меня есть мой код 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.
Куда я иду не так? Нужно ли ставить флаг (ы) в другом месте? Нужно ли сдаваться?
Я узнал, что это сработало, когда я сделал следующее.
NVCC флаги -Xcompiler -fopenmp -fgomp файловые материалы
Благодаря Тудору
Других решений пока нет …