使用f2py连接python和Fortran语言。f2py网站https://docs.scipy.org/doc/numpy/f2py/
在使用gfortran和pgfortran(PGI)集成OpenMP之前,Fortran都可以使用。
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求异
我想将其扩展到OpenAcc,并且也可以识别!$ acc,但是失败了,因为pgfortran(PGI)中包含了openacc,所以我使用如下的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找到Using F2Py with OpenACC gives import error in Python之后用acc(gfortran)和f2py编译,但我仍然想知道是否可以将pgfortran和acc连接到python?我应该使用哪些编译标志?谢谢
尝试使用“ -ta = tesla:nordc”进行编译。 RDC代表可重定位的设备代码,它要求设备代码与设备链接器链接。尽管我们(PGI)增加了对在共享库中使用RDC的支持,但我不确定f2py使用的进程,因此可能未使用pgfortran创建共享库,因此错过了设备链接步骤。
使用nordc的警告是,您将无法在模块本身之外使用设备模块数据(通过“ declare”指令),也不能调用设备例程(通过“ routine”指令)。