DVM-система
  • Изучите
    O системе Документация Примеры программ Производительность
  • Воспользуйтесь
    Доступна на суперкомпьютерах Попробуйте на нашем сервере Установите на свой компьютер Frequently asked questions
  • Прочтите и посмотрите
    Публикации Доклады Конференции Видео
  • Свяжитесь с нами
  • Студентам
    Рус Eng
    • Использование диапазонов при задании обновляемой части массива в директивах actual/get_actual в CDVMH

      В директивах актуализации данных помимо указания всего массива целиком #pragma dvm actual(A) можно дополнительно указать диапазон обновляемых элементов, например, #pragma dvm actual(A[0:1]). В этом случае обновление на устройстве или хосте произойдет только для элементов указанного диапазона, при этом правая граница диапазона включается в набор обновляемых элементов (в примере выше, для обновления на устройство будут помечены элементы A[0] и A[1].

    • Сложные выражения в правилах выравнивания CDVMH

      Компилятор CDVMH в данный момент допускает правила выравнивания строго в форме a*i+b. При этом порядок слагаемых важен, индексная переменная i не может размещаться в скобках, а коэффициент aи свободный член bдолжны быть единым выражением. Таким образом, если aили b не являются неотрицательными константами, то их необходимо поместить внутрь скобок (...).

      Например, корректная запись директивы должны иметь вид:

      #pragma dvm parallel ([i][j][k] on A[(-1) * i + (L-2)][j][k])

      В этом случае aполучает значение -1, а bполучает значение L-2.

      Следующие директивы ошибочны:

      // Ошибка выполнения программы - неправильная запись правила выравнивания.
      #pragma dvm parallel ([i][j][k] on A[L-2-(i)][j][k])

      Все выражение L-2-(i)будет рассматриваться компилятором как одно выражение (инвариантное для цикла) в правиле выравнивание, i индексная переменная не будет обнаружена и выравнивания на итерацию цикла не будет. При этом такая программа может компилироваться успешно, но работать будет некорректно.

      // Ошибка компиляции программы - неправильная запись правила выравнивания.
      #pragma dvm parallel ([i][j][k] on A[L-2-i][j][k]

      Будет выдана синтаксическая ошибка разбора данного выражения вида error #3431: Syntax error in mapping specification. Invalid axis mapping rule at column ....

    • Ошибка компиляции 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 системы в соответствии с инструкцией.

    Рус Eng
    Получайте новости DVM-системы по почте
    DVM-система. Все права защищены© 2025