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

问题描述 投票:1回答:1

使用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?我应该使用哪些编译标志?谢谢

python fortran f2py pgi
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.