|
|
|
Постановка задачи
|
|
|
|
|
Метод решения
|
|
|
|
|
Вычислительная схема
|
|
|
|
|
Анализ эффективности
|
|
|
|
|
Результаты эксп.
|
|
|
|
|
Руководство программ.
|
|
|
|
|
Руководство польз.
|
|
|
|
|
Об Авторах
|
|
|
|
Руководство программиста
Программа бала разработана в среде программирования C++Builder 5.
'0'-й процесс используется программой для управления параллельными вычислениями,
которое производится посредством стандартного оконного Windows интерфейса.
Главное Окно позволяет задавать основные параметры модели и просматривать показатели
вычислительной эффективности, а так же наблюдать динамическое изменение ситуации
в океане, с помощью его графического изображения.
На других, вычислительных процессах, реализован бесконечный цикл ожидания,
который осуществляет приём команд на выполнение некоторых функций с 0-го управляющего
процесса. Вход в этот цикл осуществляется вызовом функции
ProcWaiting на вычислительных процессах. Команды, а так
же аргументы выполняемых функций отправляются с 0-го процесса на вычислительный путём
обычных операций MPI типа Send.
Команды модулю ожидания:
-
Ничего не делать
WTCMD_NOTHING 100
-
Задать параметры модели и определить нач. состояние океана
WTCMD_INPUTDATA 101
-
Выполнить расчёт следующей итерации состояния океана
WTCMD_UPDATEOCEAN 102
-
Собрать данные о текущем состоянии океана
WTCMD_GATHERINFO 103
-
Определить затраченое время
WTCMD_GETCALCTIME 105
-
Получить параметры модели
WTCMD_GETMODELPAR 106
-
Завершить работу процесса
WTCMD_EXITWAITING 107
В данной работе была использована следующая структура хранения
данных ячейки океана, которая содержит необходимую информацию для работы модели:
TOceanCell {
char CType; // Тип объекта (fish(0), shark(1) or
empty(2))
int Xp, Yp; // Координаты в океане
int Age; // Возраст особи
int LastAte; // Номер Итерации при последнем принятии пищи
int Iteration; // Номер итерации
};
Основной программный модуль параллельных вычислений содержит функции, назначение
и описание которых приводится ниже:
-
Функция подготовки к вычислениям (Выполняет стандартную инициализацию MPI и
создание некоторых процессорных коммуникаторов и топологий)
int InitCalc(int argc, char
**argv);
-
Функция завершения вычислений (Производит освобождение захваченной памяти на
процессе, а так же уничтожение типов, групп и коммуникаторов)
void CloseCalc();
-
Функция ввода начальных данных (Позволяет задать начальные параметры модели,
сгенерировать случайное расположение особей в океане и создать типы MPI для передачи данных)
int InputData(int GridSize, int
FishAmount, int SharkAmount, int FishBreed, int SharkBreed,
int
SharkStarve);
-
Функция определения начальных параметров модели (Предназначена для определения
измений параметров модели, связанных с числом процессов,
которые сиспользует программа)
void ModelParam(int *NProcs, int
*GridSize, int *FishAmount, int *SharkAmount, int
*NDomSideOcn);
-
Главная функция пересчёта состояния океана (Это основная функция выполняющая
непосредственное моделирование, с учётом особенностей параллельного алгоритма.
Эта функция возвращает номер итерации жизни океана)
int UpdateOcean();
-
Функция сбора информации о текущем состоянии океане со всех процессов (Выполняет
передачу данных о квадрантах океана с вычислительных на 0-й процесс и производит их
сборку в единый массив океана)
int GatherOceanInfo(char** Ocean, int
*GridSize);
-
Функция определения времени выполнения последней операции (Позволяет определить
время выполнения ввода нач. данных, пересчёта состояния океана или сбора данных об океане
с процессов)
void GetLastCalcTime(double *Time);
|
|