现在我正在处理一个使用 PGI 的 fortran-cuda 的科学项目。我们发现 PGI 的 omp 支持太差了,以至于我们无法通过 pgfortran 并行 omp 任务。所以我们决定抽出一些东西,把它做成C++,然后用g++编译。
我们想要将 PGI 的 pgfortran 编译器与 GNU 的 g++ 混合使用的另一个原因是我们需要使用 pgfortran 来编译我们代码的 cuda-fortran 部分,我们还需要使用 Nvidia 的 NVCC(它使用 g++ 来编译主机代码) 来编译其中包含 CUDA 且 pgfortran 无法正确编译的 OMP 段。
最后,当我将g++编译的C++目标文件和pgfortran编译的Fortran目标文件链接在一起时,如果我不放-lgomp选项,就会出现链接错误。但如果我把它放在那里,OMP 线程的行为就很奇怪。
我认为问题在于两个不同的编译器使用不同的 OMP 库,而 gomp 是 GNU 的库。所以有人知道如何正确链接它们吗?或者有人可以告诉我如何链接 PGI 的 OMP 库吗?