Сейчас я работаю над научным проектом, в котором мы используем фортран-куда из PGI. Мы обнаружили, что поддержка omp в PGI настолько мала, что мы не можем выполнить параллельную задачу omp от pgfortran. Поэтому мы решили извлечь что-то, сделать C ++ и скомпилировать его с помощью g ++.
Другая причина, по которой мы хотим смешать PGI-компилятор pgfortran с GNU G ++, заключается в том, что нам нужно использовать pgfortran для компиляции части кода cuda-fortran, а также нам нужно использовать NVCC от Nvidia (который использует g ++ для компиляции кода хоста). ) скомпилировать те сегменты OMP, в которых есть CUDA и которые не могут быть правильно скомпилированы pgfortran.
Наконец, когда я связываю объектные файлы C ++, скомпилированные с помощью g ++, и объектные файлы Fortran, скомпилированные с помощью pgfortran, если я не укажу здесь опцию -lgomp, возникнут ошибки при связывании. Но если я поставлю это там, поведение потоков OMP будет странным.
Я думаю, проблема в том, что два разных компилятора используют разные библиотеки OMP, а gomp — это библиотека GNU. Так кто-нибудь знает, как правильно их связать? Или может кто-нибудь сказать мне, как связать библиотеку OMP PGI?
Задача ещё не решена.
Других решений пока нет …