fdvmPDr (1158423)
Текст из файла
19
Институт прикладной математики им. М.В.Келдыша
Российская Академия наук
Компилятор Fortran DVM
Эскизный проект
Март, 2000
Оглавление
1 Функции компилятора 3
2 Состав компилятора 3
3 Принципы реализации 4
4 Трансляция FDVM программы 4
4.1 Распределенные массивы 4
4.2 Трансляция директив спецификации 5
4.2.1 Директива PROCESSORS 5
4.2.2 Директивы отображения данных 6
4.2.3 Директива TASK 8
4.2.4 Директивы REMOTE_GROUP и REDUCTION_GROUP 8
4.3 Трансляция исполняемых директив и операторов 9
4.3.1 Директива PARALLEL 9
4.3.2 Директивы PREFETCH и RESET 13
4.3.3 Директива MAP 13
4.3.4 Конструкция TASK_REGION 14
4.3.5 Конструкция параллельного цикла по задачам 14
4.3.6 Другие директивы FDVM 14
4.3.7 Директивы отладки 15
4.3.8 Операторы ввода-вывода 16
5 Трансляция HPF-DVM программы 17
5.1 Оператор присваивания и другие исполняемые операторы вне цикла INDEPENDENT 17
5.2 Директива INDEPENDENT 18
1Функции компилятора
Язык Fortran DVM (FDVM) является расширением языка Фортран 77 для параллельного программирования. Расширение оформлено в виде специальных комментариев (директив DVM), которые аннотируют последовательную программу на языке Фортран 77.
Компилятор транслирует параллельную FDVM программу в программу на языке Фортран 77 с вызовами функций системы поддержки параллельного выполнения (Lib-DVM). Система поддержки Lib-DVM написана на языке C и использует средства MPI для обеспечения межпроцессорного взаимодействия.
По требованию пользователя компилятор FDVM генерирует расширенный код для отладки и анализа производительности. Специальный режим компиляции предназначен для генерации «последовательной» программы, игнорируя директивы DVM.
Компилятор FDVM транслирует также программы, написанные на языке HPF-DVM, который является подмножеством HPF.
2Состав компилятора
Процесс компиляции состоит из трех фаз.
Сначала производится синтаксический анализ программы на исходном языке и формируется ее внутреннее представление (.dep файл), которое состоит из дерева грамматического разбора, таблицы символов и таблицы типов.
Вторая фаза предполагает анализ и реструктурирование внутреннего представления FDVM программы. Каждая директива DVM заменяется последовательностью обращений к функциям системы поддержки Lib-DVM. На этой фазе осуществляются следующие действия:
-
генерация обращений к функциям и операторов присваивания значений этих функций;
-
создание операторов объявлений служебных переменных, используемых для передачи аргументов, запоминания значения функций, буферизации ввода-вывода и адресации распределенных массивов;
-
линеаризация ссылок на элементы расспределенных массивов.
При этом, может потребоваться реструктурирование графа управления, когда новый оператор включается в программу (перемещение и замена меток, замена оператора логический IF конструкцией IF...THEN...ENDIF и т.п.).
Третья фаза – это генерация кода на Фортране 77, соответствующего ре-структурированному внутреннему представлению.
3Принципы реализации
В качестве инструментального средства разработки компилятора FDVM используется система Sage ++.
Синтаксический анализатор системы Sage++ для Фортрана, который базируется на GNU Bison версии языка YACC, расширен средствами обработки директив DVM.
Программа «back-end» написана на языке C++ с использованием библиотеки классов Sage++. Она просматривает программу в лексическом порядке и заменяет каждую директиву DVM последовательностью вызовов функций Lib-DVM.
Генерация нового кода на Фортране 77 осуществляется посредством функции unparse( ) класса File из библиотеки классов Sage++.
4Трансляция FDVM программы
4.1Распределенные массивы
Массив с атрибутом DISTRIBUTE или ALIGN называется распределенным массивом. Память для элементов таких массивов отводится системой поддержки Lib‑DVM. Система поддержки отводит память на каждом процессоре для локальной секции массива в соответствии с форматом распределения массива, заданным директивой DISTRIBUTE, и для теневых граней, объявленных в директиве SHADOW.
Распределенный массив адресуется относительно базы, объявляемой посредством операторов:
integer i0000m(0:0)
common /mem000/ i0000m
real r0000m(0:0)
equivalence (i0000m,r0000m)
Коэффициенты адресации и смещение вычисляется функцией системы поддержки (align()) и запоминается в дескрипторе распределенного массива, называемом заголовком массива. Память для заголовка массива отводится в программе пользователя. Компилятор FDVM удаляет из программы пользователя описание распределенного массива и включает в нее описание заголовка массива как одноименного целочисленного вектора из 2*N+2+NR элементов, где N – размерность массива, а NR – число слов памяти, отводимой для заголовков буферов удаленных данных. Так например, если A является распределенным массивом, то оператор описания
real A(L1:U1,L2:U2,...,LN:UN)
заменяется оператором
integer A(2*N+2+NR)
Компилятор линеаризует каждую ссылку на элемент распределенного массива
A(I1,I2, ..., IN)
, заменяя ее выражением
N
r0000m(A(N+2) + I1 + A(N-j+2) * Ij )
i=2
Структура заголовка массива приводится на Рис.1.
| 1 | указатель на структуру Lib-DVM | |
| 2 | C1 | коэффициенты |
| 3 | C2 | адресации |
| . . . | элементов | |
| N+1 | CN | массива |
| N+2 | смещение | |
| N+3 | L1 | нижние |
| N+4 | L2 | границы |
| . . . | измерений | |
| 2*N+2 | LN | массива |
| 2*N+3 | счетчик удаленных ссылок | |
| память для | ||
| . . . | заголовков буферов | |
| удаленных данных |
Рис.1. Структура заголовка массива в FDVM.
Первые N+2 элемента заголовка инициализируются функцией системы поддержки align( ) и обновляются функциями realn( ) и redis( ). Для запоминания значений нижних границ измерений массива компилятор вставляет операторы присваивания в программу пользователя.
4.2Трансляция директив спецификации
4.2.1Директива PROCESSORS
Директива PROCESSORS описывает виртуальную систему процессоров. Директива
*DVM$ PROCESSORS P(NP1,…,NPr)
заменяется оператором
INTEGER P
А также, в программу включается (непосредственно перед первым исполняемым оператором) следующий сегмент операторов:
* получение вектора размеров измерений процессорной системы
size(1) = NP1
. . .
size(r) = NPr
* создание процессорной системы
P = psview(ps,r,size,0)
Ссылки на функции NUMBER_OF_PROCESSORS ( ) и ACTIVE_NUM_PROCS( ) заменяются ссылками на функцию Lib-DVM
getsiz(getps(-1), 0) и getsiz(getps(0), 0) ,
соответственно.
4.2.2Директивы отображения данных
Директивы спецификации DISTRIBUTE, ALIGN и TEMPLATE определяют дерево отображения распределенных массивов. Анализируя директивы спецификации, компилятор FDVM строит деревья отображения и генерирует операторы для создания распределенных массивов:
Например, следующие директивы
REAL A(100), B(100), C(100,100), D(100)
*DVM$ TEMPLATE T(100,100)
*DVM$ DISTRIBUTE T (BLOCK, BLOCK)
*DVM$ ALIGN A(I) WITH T(I,*)
*DVM$ ALIGN B(I) WITH T(*,I)
*DVM$ DISTRIBUTE C (BLOCK, BLOCK)
*DVM$ DISTRIBUTE D (GEN_BLOCK(NB)) ONTO P
задают следующее дерево выравниваний:
A B
\ /
T
Для создания распределенного объекта генерируется следующая последовательность операторов:
-
для шаблона выравнивания T
* получение вектора размеров измерений шаблона
size(1) = размер-N-ого-измерения
. . .
size(N) = размер-1-ого-измерения
* создание представления абстрактной машины
iamv = crtamv(am,N,size,...)
* отображение представления абстрактной машины на процессорную систему
it = distr(iamv,ps,...)
где am – ссылка на текущую абстрактную машину,
ps – ссылка на текущую процессорную систему.
-
для массива A с атрибутом ALIGN
* запоминание нижних границ измерений распределенного массива
* в его заголовке
A(N+3) = L1
. . .
A(2*N) = LN
* создание распределенного массива
it = crtda(A,i0000m,N,...)
. . .
* выравнивание (отображение) распределенного массива
it = align(A,iamvt,N,...)
-
для массива C с атрибутом DISTRIBUTE
* получение вектора размеров измерений массива
size(1) = размер-N-ого-измерения
. . .
size(N) = размер-1-ого-измерения
* создание представления абстрактной машины
iamv = crtamv(am,N,size,...)
* отображение представления абстрактной машины на процессорную систему
it = distr(iamv,ps,...)
* запоминание нижних границ измерений распределенного массива
* в его заголовке
C(N+3) = L1
. . .
C(2*N) = LN
* создание распределенного массива
it = crtda(C,i0000m,N,...)
. . .
* выравнивание (отображение) распределенного массива
it = align(C,iamv,N,...)
-
для массива D с атрибутом DISTRIBUTE (формат GEN_BLOCK):
* получение вектора размеров измерений массива
size(1) = размер-N-ого-измерения
. . .
size(N) = размер-1-ого-измерения
* создание представления абстрактной машины
iamv = crtamv(am,N,size,...)
* установка весов элементов процессорной системы
it = genbli(ps,iamv,NB,…)
* отображение представления абстрактной машины на процессорную систему
it = distr(iamv,ps,...)
* запоминание нижних границ измерений распределенного массива
* в его заголовке
C(N+3) = L1
. . .
C(2*N) = LN
* создание распределенного массива
it = crtda(D,i0000m,N,...)
. . .
* выравнивание (отображение) распределенного массива
it = align(D,iamv,N,...)
Операторы для создания распределенных объектов вставляются в программную единицу перед первым исполняемым оператором.
Для динамического массива, адресуемого с помощью переменной POINTER, генерируется такая же последовательность операторов, но она вставляется в программу вместо оператора:
pointer= ALLOCATE(...).
Секция массива HEAP:
HEAP( I : I+header-size-1)
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















