-
Ошибка компиляции Fortran-DVMH программы: несоответствие фактических и формальных аргументов
При использовании современных версий Фортран компилятора GNU (gfortran) для компиляции DVMH программ возможно возникновение ошибок аналогичных следующей:
Error: Type mismatch between actual argument at (1) and actual argument at (2) (INTEGER(4)/INTEGER(8)). jac.DVMH.f:41:25: 34 | dvm000(2) = getai (dvm000(1)) | 2 ...... 41 | dvm000(9) = getai (i0000m(1))
Данная ошибка связана с тем, что некоторые функции системы поддержки DVMH могут быть вызваны с разным числом параметров разных типов. Современные компиляторы пытаясь гарантировать корректность вызова функций могут запрещать такое поведение. Чтобы данные ошибки трактовались компилятором как предупреждения можно добавить опцию
-fallow-argument-mismatch
.Допустим один из двух вариантов.
Можно в скрипте
dvm
раскомментировать и изменить переменнуюPFORT
:export PFORT='mpifort -g -O2 -fopenmp -fallow-argument-mismatch'
Иди можно задать переменную
PFORT
в файле, определяющем конфигурацию сборки DVM системы. Имя конфигурации указано в файле…/dvm_sys/platform
. Файл, совпадающий с именем конфигурации, необходимо найти директории…/dvm_sys/platforms
. Необходимо внести изменения в данный файл:PFORT='mpifort -g -O2 -fopenmp -fallow-argument-mismatch'
-
Ошибка установки и/или использования DVM системы с использованием MPICH и GCC
При одновременном использовании MPICH реализации MPI совместном с компилятором GCC возможно возникновение ошибок компоновки при сборке DVM системы и/или при компиляции DVMH программ. Ошибка связана с тем, что скрипт
mpicc
иmpicxx
запускают компилятор GCC с включенной межмодульной оптимизацией (-lto=auto
), при этом компилятор не справляется с оптимизацией системы поддержки DVM системы совместно с компилируемой программой.Возможным решением может быть отключение межмодульной оптимизации, в этом случае в конфигурации сборки системы для всех компиляторов нужно задать
-fno-lto
.Имя конфигурации указано в файле
.../dvm_sys/platform
. Файл, совпадающий с именем конфигурации, необходимо найти в директории.../dvm_sys/platforms
. Необходимо внести изменения в данный файл и привести его к виду аналогичному следующему:CC='gcc -g -O2 -fno-lto' CXX='g++ -g -O2 -fno-lto' LINKER='g++ -g -fno-lto' ... PCC='mpicc -g -O2 -fopenmp -fno-lto' PCXX='mpic++ -g -O2 -fopenmp -fno-lto' PFORT='mpifort -g -O2 -fopenmp -fallow-argument-mismatch -fno-lto' PLINKER='mpic++ -g -fopenmp -fno-lto' PFLINKER='mpifort -g -fopenmp -fno-lto' ... NVCC='/usr/bin/nvcc -std=c++11 -Xcompiler -fno-lto' ...
-
Ошибка компиляции CDVMH программ: не удается найти компилятор c_dvmh
Данная ошибка связана с тем, что в процессе сборки DVM системы по какой-то причине не был собран конвертер СDVMH программ (
c_dvmh
).../dvm_sys/bin/dvm_utils.sh: line 66: c_dvmh: command not found
Исполняемый файл конвертера после сборки должны располагаться в директории
bin
, в которую выполнялась установка DVM системы. В данном примере это.../dvm_sys/bin
.Для сборки C DVMH конвертера необходимо наличие установленных библиотек Clang, одной из поддерживаемых версий. Важно, чтобы были установлены библиотеки разработчика, которые обычно имеют суффикс
dev
в названии.Также стоит проверить конфигурацию сборки DVM системы. Имя конфигурации указано в файле
.../dvm_sys/platform
. Файл, совпадающий с именем конфигурации, необходимо найти в директории.../dvm_sys/platforms
. В данном файле необходимо проверить корректность задания переменнойLLVMCONFIG
, в которой должен быть указан путь до программыllvm-config
, соответствующей используемой версии LLVM и Clang, например,LLVMCONFIG=llvm-config-17
(в этом случае путь доllvm-config-17
должен быть добавлен в переменную окруженияPATH
).После установки нехватающих библиотек и исправления конфигурации сборки необходимо повторить сборку DVM системы в соответствии с инструкцией.