Почему f2py компилируется с флагом -qopenmp ifort даже в последовательном режиме? - PullRequest
0 голосов
/ 30 января 2019

У меня есть код на Fortran 90, в некоторых частях реализован OpenMP.Теперь, чтобы скомпилировать код на Фортране, используя f2py с поддержкой OpenMP, я должен передать флаги компилятора f90.Теперь код должен компилироваться с поддержкой OpenMP, только если я предоставлю соответствующий флаг OpenMP, если только он не должен быть скомпилирован как обычный последовательный код.Это работает как положено для gfortran, но для ifort это не так.Объясним это,

, если я бегу (последовательный режим gfortran)

f2py -c adt.f90 -m adt_module 
*Gives output (last few lines)*
Fortran f77 compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran f90 compiler: /usr/bin/gfortran -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran fix compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops

(параллельный режим gfortran)

f2py -c adt.f90 -m adt_module --f90flags='-fopenmp' -lgomp 
*output*
Fortran f77 compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran f90 compiler: /usr/bin/gfortran -fopenmp -fPIC -O3 -funroll-loops
Fortran fix compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fopenmp -fPIC -O3 -funroll-loops

Как вы можете ясно увидеть, нет-fopenmp флаг во время компиляции в последовательном режиме, как и ожидалось, поскольку я не прошел требуемый флаг

Теперь для ifort

(параллельный режим ifort)

f2py -c adt.f90 -m adt_module --fcompiler=intelem --f90flags='-qopenmp' -liomp5
*Output*
Fortran f77 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -fPIC -fp-model strict -O1 -qopenmp 
Fortran f90 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FR -qopenmp -fPIC -fp-model strict -O1 -qopenmp 
Fortran fix compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -qopenmp -fPIC -fp-model strict -O1 -qopenmp

(ifort serial mode)

f2py -c adt.f90 -m adt_module --fcompiler=intelem
*Output*
Fortran f77 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -fPIC -fp-model strict -O1 -qopenmp 
Fortran f90 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FR -fPIC -fp-model strict -O1 -qopenmp 
Fortran fix compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -fPIC -fp-model strict -O1 -qopenmp

Теперь, вот проблема, смотри здесь компиляция выполняется с флагом -qopenmp для последовательного режима, но я не передал его в командной строке.Почему это происходит при компиляции с ifort, а не с gfortran?И как это решить?

...