Gfortran версии 4.1.2 и 4.2.3 - PullRequest
       26

Gfortran версии 4.1.2 и 4.2.3

0 голосов
/ 28 сентября 2010

Привет всем, я развертываю свой код из кластера, работающего на Ubuntu, на кластер с идентичным оборудованием, но с Red Hat и, как кажется, более старым компилятором gfortran.Источник на самом деле скомпилирован ifort, но так как он не установлен на кластере красного цвета, мне, возможно, придется переключиться на gfortran.

Теперь проблема в том, что код не компилируется.Есть такая вещь с «распределением» внутри типа, которую я мог бы исправить в своей части кода, но есть и другие вклады других людей, которые не были готовы адаптировать свой код к более старому стандарту.

Мой вопрос:

  1. Как мне, тем не менее, выполнить развертывание в другой системе, надеюсь, не сильно меняя?та же версия, просто другая подрывная деятельность?
  2. Как мне обеспечить, чтобы что-то подобное не повторилось?Код должен быть развернут на различных системах, не прибегая к насилию.

Спасибо за ваш совет и ура

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

gfortran начался с версии 4.0.Версии 4.1 и 4.2 старые и в них отсутствуют многие функции и могут быть ошибки.Вы можете столкнуться с дополнительными недостающими функциями, которые используются вашим кодом.Я предлагаю, если это вообще возможно, обновить компилятор до текущей стабильной версии 4.5.

Поддержка всех версий gfortran приведет к множеству ограничений в вашем коде.Возможно, было бы лучше определить самую раннюю версию, которая работает, и добавить эту информацию в документацию.Для моего кода это версия 4.3, так как я широко использую привязку ISO C.

Вики gfortran, http://gcc.gnu.org/wiki/GFortran, имеет список изменений по версиям, который может помочь вам определить, какая версия вам нужна.Единственный верный способ - это тестирование.

Если вы хотите применить требование к версии, вы можете выполнить тестирование в Fortran.Вы можете запустить небольшую тестовую программу как часть процесса make и прервать ее, если версия gfortran слишком ранняя.

Следующий фрагмент кода показывает два способа вывода номера версии gfortran из программы на Fortran.Назовите программу с типом файла «.F90», чтобы gfortran вызывал препроцессор.

#ifdef __GFORTRAN__ 
    write (*, '( "gfortran" )' )
    write (*, '( I0, ".", I0 )' )  __GNUC__, __GNUC_MINOR__

! Merged version number:
#define GCC_VERSION (__GNUC__ * 10000  + __GNUC_MINOR__ * 100  + __GNUC_PATCHLEVEL__)
    write (*, '( I0 )' )  GCC_VERSION

#endif
1 голос
/ 28 сентября 2010

Я думаю, что у вас есть 3 варианта:

  1. Кросс-компиляция: то есть компиляция на машине разработки для выполнения на машине развертывания;Я не знаю, возможно ли это с вашей настройкой, но стоит изучить, если вы еще этого не сделали.
  2. Программирование набора функций Fortran, реализованных во всех ваших компиляторах - что будет означать- написание кода для использования любых функций, реализованных в 4.2.3, которые не реализованы в 4.1.2.
  3. Обновите компилятор на компьютере развертывания, чтобы он соответствовал компилятору на компьютере разработчика.

Из них я думаю, что (1) может быть трудно;если это так, то я бы пошел на (3).Если это невозможно, то это должно быть (2) - я не вижу других вариантов.

Теперь, чтобы ответить на ваши вопросы:

  1. Ответил выше.
  2. Не уверен, но в примечаниях к выпуску Gfortran должно быть указано, какие функции языка Fortran реализованы в 4.2.3, а в 4.1.2 нет.
  3. Только программа с версией Fortran, для которой вы можетекомпилировать на ваших целевых платформах.
...