Параллельные вычисления в ИММ УрО РАН
 
 

Фортран 90

В ИММ попрежнему программируют на Фортране. И главной сложностью в использовании Фортрана для больших задач является согласование взаимодействия частей большой задачи. С добавлением параллелизма эти сложности возрастают.

 Главные проблемы в программировании на Фортране до 77-го:

 Коллизии согласования имен данных и подпрограмм при линейной структуре программы

Повторное использование затруднено (частично следует из предыдущего)

Статическое распределение памяти

 Отсутствие возможности создания новых типов

 Эти сложности в значительной мере уменьшаются при использовании технологий объектно - ориентированного программирования. А именно: технология ООП

  • значительно облегчает проектирование и сборку программ из составляющих элементов,
  • обеспечивает "повторное" использование разработанных элементов (библиотеки-компоненты, контейнеры, в том числе динамические и разделяемые, и др.)

Поэтому желательно идеи ООП внести и в Фортран.

Типичная структура программы на Фортран 77

 

PROGRAM NAME1

CALL NAME2

END

SUBROUTINE NAME2

COMMON /SS/x,y,z

END

:.

 SUBROUTINE NAMEn

COMMON /SS/a,b,c

END

 

 Объекты и Фортран 90

Краткое описание Фортрана 90. Его особенности и свойства

 Прежде всего отметим, что Фортран 90 более эффективный язык чем Фортран 77 для программы с большими массивами и большим числом структурных единиц программы и данных.

 Рассмотрим Фортран 90 с точки зрения его свойств как языка ООП, его общую характеристику языка и его главные отличия от Фортран 77. Затем дадим характеристику некоторых конструкций и операторов языка. Небольшие примеры покажут свойства языка.

Объекты в Фортране 90

  • Понятию "класс" соответствует понятие "модуль", близкое понятию "пакет" в языке Ада и понятию "модуль" в Турбо-Паскале.
  • В модуле определяются типы, данные, процедуры (подпрограммы subroutine, function, операции), интерфейсы.
  • Понятие "генерация объекта" явно в языке отсутствует в отличие от "настоящих" ООП-языков. Скорее имеет место генерация одного объекта из класса, и возможна генерация элементов объекта, зависящих от особенностей использования.

 При описании данных определяются их свойства, часть свойств называется атрибутами.

К числу свойств относятся

  • имена, типы, структуры,
  • размерности и размеры,
  • ограничения на использование и доступ к данным
  • и др.

 Атрибуты определяются описателями:

PARAMETER, PUBLIC, PRIVATE, INTENT, DIMENSION, SAVE, OPTIONAL, POINTER, TARGET, ALLOCATABLE, EXTERNAL и INTRINSIC. О некоторых из них будет сказано ниже. Ряд атрибутов применялся и в Фортране 77.

Структура модуля и пример

MODULE имя

[определения]

...

[CONTAINS

процедуры модуля]

END [MODULE [имя]]

MODULE global

REAL, DIMENSION(100) :: a, b, c

INTEGER :: list(100)

LOGICAL :: test

END MODULE global

 

Схема структуры модуля показывает, что все содержащиеся в модуле процедуры (подпрограммы и функции) размещаются между ключевыми операторами CONTAINS и END MODULE.

Пример модуля cartesian с процедурой swap

MODULE cartesian

TYPE point

REAL :: x, y

END TYPE point

CONTAINS

SUBROUTINE swap( p1, p2 )

TYPE(point), INTENT(INOUT):: p1, p2

TYPE(point) :: tmp

tmp = p1

p1 = p2

p2 = tmp

END SUBROUTINE swap

END MODULE cartesian

 В этом модуле дается описание типа point как структуры, содержащей два поля x, y типа REAL, а также процедура swap с двумя параметрами p1, p2, из которых каждый описан имеющим тип point и атрибут INTENT (вид параметра) со значением INOUT (входной IN и выходной OUT одновременно, или изменяемый). Тип point задан и для локальной переменной tmp. Символом :: отделяется перечисление свойств переменных от списка переменных.

Использование cartesian

Использование описаний и процедур модуля должно идти после объявления о намерении использовать модуль (оператор USE) в использующей процедуре.

 PROGRAM graph

USE cartesian

TYPE(point) :: first, last

...

CALL swap( first, last)

...

END PROGRAM graph

Инкапсуляция в Ф-90

Наследование в Фортране 90

Полиморфизм

Обработка больших массивов

Структура Фортран 90

 

Трансляция и запуск на Альфа

 

  

Трансляция и запуск на кластере um16

Запуск на одном процессоре

Запуск на нескольких процессорах с использованием mpi

 Размещение информации о Фортран-средствах на сервере ИММ