繁体   English   中英

如何通过 f2py 将 pgfortran(具有 OpenAcc direvative )与 python 连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM