У меня есть код на 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?И как это решить?