【问题标题】:how to connect pgfortran(has OpenAcc direvative ) with python by f2py如何通过 f2py 将 pgfortran(具有 OpenAcc direvative)与 python 连接起来
【发布时间】:2019-11-05 19:12:09
【问题描述】:

使用 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 在 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

google 后找到Using F2Py with OpenACC gives import error in Python 用 acc (gfortran) 和 f2py 编译, 但我仍然想知道是否可以将 pgfortran 与 acc 连接到 python?我应该使用哪些编译标志? 谢谢

【问题讨论】:

  • 语言名称是 Fortran。自 1990 年以来,它一直被拼写为 Fortran

标签: python fortran f2py pgi


【解决方案1】:

尝试使用“-ta=tesla:nordc”进行编译。 RDC 代表可重定位设备代码,它要求设备代码与设备链接器链接。虽然我们 (PGI) 添加了对在共享对象中使用 RDC 的支持,但我不确定 f2py 使用的进程,因此可能没有使用 pgfortran 创建共享对象,因此错过了设备链接步骤。

使用 nordc 的警告是,您不能在模块本身之外使用设备模块数据(通过“declare”指令),也不能调用设备例程(通过“routine”指令)。

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2020-11-18
    • 2019-09-01
    • 2016-09-08
    • 2017-06-03
    相关资源
    最近更新 更多