使用f2py连接python和Fortran语言。f2py网站https://docs.scipy.org/doc/numpy/f2py/
在使用Fortran之前,gfortran和pgfortran(PGI)集成OpenMP都可以工作。
makefile文件如下
gfortran版本
gfortran -c -fopenmp mod_readfile.f90 -lgomp
f2py -c mod_readfile.f90 --f90flags="-fopenmp" -lgomp -m mod_readfile
pgfortran版本
pgfortran -c -mp mod_readfile.f90 -lgomp
f2py -c mod_readfile.f90 --fcompiler=pg --f90flags="-mp" -lgomp -m mod_readfile
然后!Fortran中的$omp direvative就被识别出来了
我想将它扩展到OpenAcc,也可以识别!$acc,但失败了,因为openacc被合并到pgfortran(PGI)中,所以我使用makefile,如下所示
pgfortran -c -acc mod_readfile.f90 -lcublas -lcudart -lgomp
f2py -c mod_readfile.f90 --fcompiler=pg --f90flags="-acc" -m mod_readfile -lcublas -lcudart -lgomp
在我检查之前
pgfortran -c -acc mod_readfile.f90
单独使用效果很好。但是,当它作为python的模块进行操作时,它会出现一些问题。我也混淆了这些标志(-lcublas -lcudart -lgomp),下面不能工作,因为缺少-lgomp标志
gfortran -c -fopenmp mod_readfile.f90
f2py -c mod_readfile.f90 --f90flags="-fopenmp" -m mod_readfile
在google find用acc (Gfortran)和f2py编译了Using F2Py with OpenACC gives import error in Python之后,我还是想知道有没有可能让pgfortran和acc连接到python上?我应该使用哪些编译标志?谢谢
发布于 2019-10-28 22:46:37
尝试使用"-ta=tesla:nordc“进行编译。RDC代表可重定位的设备代码,它需要设备代码与设备链接器链接。虽然我们(PGI)已经添加了对在共享对象中使用RDC的支持,但我不确定f2py使用的进程可能没有使用pgfortran来创建共享对象,从而错过了设备链接步骤。
使用nordc需要注意的是,您不能在模块本身之外使用设备模块数据(通过"declare“指令),也不能调用设备例程(通过”routines“指令)。
https://stackoverflow.com/questions/58583765
复制相似问题