The ParJava environment allows to edit, to debug and to execute

advertisement
Среда ParaJava – руководство пользователя.
ВВЕДЕНИЕ.
I.
Среда ParJava позволяет пользователю разрабатывать и выполнять параллельные
программы на однородных и неоднородных вычислительных системах с распределенной
памятью, таких как суперкомпьютеры, кластеры или локальные сети. Кроме того, эта
среда дает возможность моделировать однородные вычислительные системы на
неоднородных.
II.
ИНСТАЛЯЦИЯ.
Несмотря на то что среда ParJava реализована средствами Java все-таки существует
некоторая платформо-зависимая часть библиотек связанных с реализацией интерфейса
передачи сообщений. Полная реализация MPI на Java рассматривается нами как
актуальная задача, решение которой позволит получить полную переносимость библиотек
среды ParJava.
На текущий момент предлагается два варианта дистрибуции среды ParJava:

Архив с исходными кодами native-библиотек;

Архив с прекомпиленными native-библиотеками для Solaris и Linux операционных
систем.
В первом случае требуется предварительная сборка native-библиотек. В последнем,
достаточно развернуть архив и установить переменные окружения.
Установка дистрибутива среды ParJava с исходными кодами native-библиотек:
1. Прежде всего вы должны убедится в том, что у вас установлены следующие
программные средства:

ND LAM - реализация интерфейса передачи сообщений. Среда ParJava разработана
и проверенна с использованием LAM версии 6.3.1.

JDK 1.2. (или более поздняя версия) - Среда поддержки выполнения, компилятор,
JavaVM, Java библиотеки и пр.

GCC 2.95 – Компилятор с языков программирования С/C++ необходим для
создания native-библиотек.
2. Для того чтобы сборка native-библиотек прошла корректно вам необходимо убедится в
наличии следующих переменных окружения: JAVA_HOME, LAMHOME, которые
указывают на директории, где инсталлированы соответствующие программные средства.
Если эти переменные отсутствуют необходимо создать их самостоятельно в ваших
конфигурационных файлах.
Замечания:

Для того чтобы избежать конфликтов связанных с особенностями работы
LAM утилит рекомендуется в качестве первой записи переменной окружения
PATH сделать путь указывающий на место где расположена JavaVM
(например, PATH=$JAVA_HOME/bin:<…>)
3. Разверните архив ParJava.tar.gz
#gunzip ParJava.tar.gz
#tar xvf ParJava.tar
4. В результате будет создана директория ParJava, в которой содержаться библиотеки
среды ParJava. Для того чтобы установить среду ParJava (собрать native-библиотеки,
подготовить конфигурационную директорию .PJ и пр.) зайдите в эту директории и
выполните команду setup.
#./setup
5. Добавьте к переменной окружения CLASSPATH путь к классам среды ParJava ParJava/classes, а к LD_LIBRARY_PATH путь к библиотекам - ParJava/lib.
6. Для того чтобы запустить среду ParJava необходимо в директории ParJava выполнить
команду dev.
#dev&
Установка дистрибутива среды ParJava с прекомпиленными native-библиотеками
для Solaris и Linux:
1. Прежде всего вы должны убедится в том, что у вас установлены следующие
программные средства:

ND LAM - реализация интерфейса передачи сообщений. Среда ParJava разработана
и проверенна с использованием LAM версии 6.3.1.

JDK 1.2. (или более поздняя версия) - Среда поддержки выполнения, компилятор,
JavaVM, Java библиотеки и пр.
2. Разверните архив ParJava-Linux-i386 если у вас Linux платформа, ParJavaSolaris-sparc в случае Solaris.
#gunzip <имя архива>.tar.gz
#tar xvf <имя архива>.tar
3. В результате будет создана соответствующая директория, в которой содержаться
библиотеки среды ParJava. Для того чтобы установить среду ParJava (подготовить
конфигурационную директорию .PJ и пр.) зайдите в эту директории и выполните команду
setup.
#./setup
4. Добавьте к переменной окружения CLASSPATH путь к классам среды ParJava ParJava/classes, а к LD_LIBRARY_PATH путь к библиотекам - ParJava/lib.
5. Для того чтобы запустить среду ParJava необходимо в директории ParJava выполнить
команду dev.
#dev&
III.
ВЫПОЛНЕНИЕ ПАРАЛЛЕЛЬНЫХ ПОГРАММ
TOOLS: Доступ к средствам, обеспечивающим выполнение параллельных программ на
параллельной вычислительной системе предоставляется пользователю через пункт меню
«Tools» главного окна среды.
New Net – Через пункт меню «New Net» главного окна среды ParJava пользователь
может выбрать узлы формирующие вычислительную сеть на которой будет выполнятся
параллельная программа. При вызове этого пункта меню на экране появляется диалоговое
окно, которое содержит два списка: список имен доступных узлов параллельной
вычислительной системы и список узлов включенных в вычислительную сеть. С
помощью управляющих элементов – кнопок, пользователь может формировать
вычислительную сеть, добавляя или удаляя узлы из соответствующего списка (кнопки
«add», «add all» и «remove» соответственно).
Замечания:

Перед первым запуском параллельной программы
НЕОБХОДИМО выделить вычислительную сеть.

Узел, на котором запущена среда ParJava попадает в список узлов
вычислительной сети автоматически. К имени этого узла добавляется
идентификатор «root» взятый в скобки.

Список доступных узлов параллельной вычислительной системы
формируется из пользовательского конфигурационного файла .rhosts. Если
этот файл в вашей домашней директории отсутствует, создайте его
самостоятельно руководствуясь документацией по UNIX операционным
системам.

После окончания сеанса работы в ParJava текущее состояние среды
сохраняется, в том числе и список узлов вычислительной сети.
пользователю
Hosts Performance - Определить относительную производительность узлов
вычислительной сети. При вызове этого пункта меню запускается серия тестов, которая
позволяет определить относительные производительности виртуальных Java машин,
запущенных на каждом узле вычислительной сети. При этом производительность самого
мощного узла принимается равной 100%, тогда производительности остальных узлов
вычислительной сети считаются относительно этого утверждения. Результаты тестов
представляются пользователю в диалоговом окне.
Compile – Через пункт меню «Compile» главного окна среды ParJava пользователь
может скомпилировать свою Java-программу. При вызове этого пункта меню на экране
появляется диалоговое окно, в котором по умолчанию установлена строка, определяющая
режим компиляции.
javac <полный путь><имя класса>
Пользователь может переопределить режим компиляции исходя из собственных
задач. Результат компиляции программы пользователя: предупреждения, сообщения об
ошибках и пр. выводятся в отдельное окно среды.
Замечания:

По умолчанию используется Java компилятор из среды JDK.

Среда JDK должна быть предварительно установлена. Переменные
окружения должны быть соответственно настроены. За подробными
инструкциями обращайтесь к соответствующей документации по установке
JDK.
Run - Через пункт меню «Run» главного окна среды, пользователь может выполнить
последовательную программу. При вызове этого пункта меню на экране появляется
диалоговое окно, в котором по умолчанию установлена строка, определяющая режим
выполнения программы.
java <имя класса>
Пользователь может переопределить режим выполнения исходя из собственных
задач.
Run on Homogeneous Net - Запустить SPMD Java программу на ОДНОРОДНОЙ
сети виртуальных Java машин. Однородная сеть
моделируется на текущей
вычислительной сети с оптимальным количеством узлов. При вызове этого пункта меню
на экране появляется диалоговое окно, в котором по умолчанию установлена строка,
определяющая режим выполнения программы.
Пользователь может переопределить
режим выполнения исходя из собственных задач.
Run on Heterogeneous Net - Запустить
НЕОДНОРОДНОЙ сети виртуальных Java машин.
SPMD
Java
программу
на
Замечания:

Необходимо отметить что если относительная производительность узла
меньше 10% процентов, то такой узел исключается из вычислительной сети.
ANALYZERS: При разработке, тестировании и отладке последовательной
программы необходимо обеспечить не только ее корректность, но и ее эффективность и
устойчивость. В случае параллельной SPMD-программы необходимо также обеспечить ее
масштабируемость. Для этого разработчику полезно знать некоторые свойства
программы, в частности ее профили. Эффективное распределение SPMD-программы по
узлам неоднородной сети требует знания значений параметров программы, определяющих
фактическую скорость ее выполнения на каждом узле сети. Для определения этих свойств
SPMD-программы в среду ParJava включены следующие «Instrumentate» и «Profile»
которые позволяют оценить затраты времени на выполнение последовательной части
программы на этапе ее разработки и отладки. Это позволяет учитывать вес
последовательной части при вычислении производительности узлов, обеспечивая
большую производительность сети при выполнении программы.
Trace Visualization – В процессе выполнения параллельной программы возможно
накопление трасировочной информации (см. пункт «Test_mode»). Визуализировать
накопленную во время выполнения параллельной программы историю можно из среды,
выбрав пункт «TraceVisualization».
Инструмент «TraceVisualization» отображает каждую параллельную ветвь SPMDпрограммы в виде горизонтальной линии, на которой квадратиками отмечены обращения
к функциям коммуникационной библиотеки. В верхней части изображения отображается
временная линейка. При помощи нее можно определить (в миллисекундах), когда
произошел вызов той или иной функции. Функции на схеме, ради экономии места и
удобства представления отображаются не названиями, а номерами (например, функциям
Init() и Finalize() сопоставлены коды 1 и 2 соответственно). Полный список
соответствий приведен в приложении «А». При наводке курсора на тот или иной
квадратик с кодом функции, появляется подсказка с именем функции и относительным
временем ее вызова. Некоторые квадратики соединены зелеными линиями; что означает
обращение ветви параллельной программы к коммуникационной функции и ожидание
внешнего события для завершения этой функции. Длина зеленой линии пропорциональна
времени ожидания внешнего события (например, ожидание данных) данной функцией.
Время простоя каждого процесса будет вычислено и отображено (в процентах от
общего времени) на диаграмме соответствующего процесса, если нажать на кнопку слева
от его изображения на экране. Простои процесса в миллисекундах отобразятся на
гистограмме. Чтобы получить диаграмму всех процессов, надо нажать кнопку «All».
Результаты профилирования программ автоматически сохраняются в системных файлах,
доступных пользователю с помощью инструмента «TraceVisualization». Имена этих
файлов различаются по двум последним цифрам. Первая из них – номер запускаемой
программы, вторая – номер процесса.
При начальном отображении схемы масштаб представления отрезков времени
выбирается таким образом, чтобы вся картина работы программы целиком уместилась на
экране. В дальнейшем масштаб изображения может быть изменен пользователем.
Пользователь может выделить участок трассы двумя красным границами и нажать кнопку
Zoom In. Тогда этот кусок растянется на весь экран. При помощи Zoom Out таким же
путем можно увеличить размеры просматриваемого отрезка времени. Передвигаться по
схеме можно при помощи полосок скроллинга.
Instrumentate – инструментирует программу, т.е. вставляет в нее отладочные
обращения к таймеру и выдачи (в процессе реализации).
Profile – составляет динамический профиль программы (в процессе реализации).
Normal_mode – Режим работы среды установленный по умолчанию.
Test_mode – переводит параллельную программу в тестовый режим, в котором она
будет выполняться с использованием специальной отладочной библиотеки. В режиме
«Test_mode» каждая ветвь параллельной программы накапливает историю параллельного
исполнения в специальном файле. В этом файле отражаются все события, связанные с
параллельным исполнением, а также абсолютное время выполнения как ветви в целом, так
и время между параллельными событиями в этой ветви. К таким событиям, например,
относятся все вызовы коммуникационных функций. Специальный файл содержит также
дополнительную информацию о событии (размер сообщений, от кого кому, номер строки
в исходной Java программе и т.д.). Действия по построению этого файла осуществляются
автоматически при помощи отладочной библиотеки и не требуют дополнительных усилий
со стороны пользователя.
ПРИЛОЖЕНИЕ «А». Соответствие кодов и имен вызовов коммуникационной
библиотеки MPI при визуализации истории выполнения параллельной программы.
0
1
2
3
4
5
6
7
Init
Finalize
Wtime
Wtick
Get_processor_name
Initialized
Buffer_attach
Buffer_detach
8 clone
9 Size
10 Rank
11 Compare
12 Free
13 Is_null
14 Group
15 Test_inter
16 Create_intercomm
17 GetIntercomm
18 Object_Serialize
19 Object_Deserialize
20 Send
21 Recv
22 Sendrecv
23 Sendrecv_replace
24 Bsend
25 Ssend
26 Rsend
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Isend
Ibsend
Issend
Irsend
Irecv
Send_init
Bsend_init
Ssend_init
Rsend_init
Recv_init
Pack
Unpack
Pack_size
Iprobe
Probe
Attr_get
Topo_test
Abort
Errhandler_set
Errorhandler_get
Disconnect
Get_parent
Join
clone
Remote_size
Remote_group
Merge
clone
Split
Creat
Barrier
copyBuffer
newBuffer
Bcast
Gather
Gatherv
Scatter
Scatterv
Allgather
Allgatherv
Alltoall
Alltoallv
Reduce
Allreduce
Reduce_scatter
Scan
Create_cart
Create_graph
Spawn
Spawn( ... , int[] array_of_errcodes)
Spawn_multiple
Spawn_multiple( ... , int[] array_of_errcodes)
Download