как связать pgfortran (имеет директиву OpenAcc) с python по f2py - PullRequest
1 голос
/ 28 октября 2019

используйте f2py для соединения языка Python и Fortran. f2py веб-сайт https://docs.scipy.org/doc/numpy/f2py/

Фортран перед использованием 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 version

    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), поэтому я использую make-файл, как показано ниже

    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 find Использование F2Py с OpenACC дает ошибку импорта в Python скомпилирован с помощью acc (gfortran) и f2py, но я все еще хочу знать, возможно ли использовать pgfortran с acc для соединения с python? какие флаги компиляции я должен использовать? спасибо

1 Ответ

0 голосов
/ 28 октября 2019

Попробуйте скомпилировать с "-ta = tesla: nordc". RDC обозначает перемещаемый код устройства, который требует, чтобы код устройства был связан с компоновщиком устройства. Хотя мы (PGI) добавили поддержку использования RDC в общих объектах, я не уверен, что процесс, используемый f2py, может не использовать pgfortran для создания общего объекта и, следовательно, пропустить шаг соединения устройства.

Предостережение об использовании nordc заключается в том, что вы не сможете использовать данные модуля устройства (через директиву "Declare") вне самого модуля, а также не вызывать подпрограммы устройства (через директиву "рутина").

...