[英]how to connect pgfortran(has OpenAcc direvative ) with python by f2py
使用 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
然后 !$omp direvative 在 Fortran 被识别
我想将它扩展到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
在谷歌发现Using F2Py with OpenACC 在 Python 中出现导入错误后,使用 acc (gfortran) 和 f2py 编译,但我仍然想知道是否可以让 pgfortran 与 acc 连接到 python? 我应该使用哪些编译标志? 谢谢
尝试使用“-ta=tesla:nordc”进行编译。 RDC 代表可重定位设备代码,它要求设备代码与设备 linker 链接。 虽然我们(PGI)增加了对在共享对象中使用 RDC 的支持,但我不确定 f2py 使用的进程,因此可能没有使用 pgfortran 创建共享 object,因此错过了设备链接步骤。
使用 nordc 的警告是,您将无法在模块本身之外使用设备模块数据(通过“declare”指令),也不能调用设备例程(通过“routine”指令)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.