Модель "Хищник-Жертва"
Постановка задачи
Метод решения
Вычислительная схема
Анализ эффективности
Результаты эксп.
Руководство программ.
Руководство польз.
 Об Авторах

     Руководство программиста 


  Программа бала разработана в среде программирования C++Builder 5. '0'-й процесс используется программой для управления параллельными вычислениями, которое производится посредством стандартного оконного Windows интерфейса. Главное Окно позволяет задавать основные параметры модели и просматривать показатели вычислительной эффективности, а так же наблюдать динамическое изменение ситуации в океане, с помощью его графического изображения.    

  На других, вычислительных процессах, реализован бесконечный цикл ожидания, который осуществляет приём команд на выполнение некоторых функций с 0-го управляющего процесса. Вход в этот цикл осуществляется вызовом функции ProcWaiting на вычислительных процессах. Команды, а так же аргументы выполняемых функций отправляются с 0-го процесса на вычислительный путём обычных операций MPI типа Send.

  Команды модулю ожидания:
  1. Ничего не делать
    WTCMD_NOTHING     100
  2. Задать параметры модели и определить нач. состояние океана
    WTCMD_INPUTDATA   101
  3. Выполнить расчёт следующей итерации состояния океана
    WTCMD_UPDATEOCEAN 102
  4. Собрать данные о текущем состоянии океана
    WTCMD_GATHERINFO  103
  5. Определить затраченое время
    WTCMD_GETCALCTIME 105
  6. Получить параметры модели
    WTCMD_GETMODELPAR 106
  7. Завершить работу процесса
    WTCMD_EXITWAITING 107

  В данной работе была использована следующая структура хранения данных ячейки океана, которая содержит необходимую информацию для работы модели:

  TOceanCell { 
    char CType; // Тип объекта (fish(0), shark(1) or empty(2))
    int Xp, Yp; // Координаты в океане
    int Age; // Возраст особи
    int LastAte; // Номер Итерации при последнем принятии пищи
    int Iteration; // Номер итерации
  };

  Основной программный модуль параллельных вычислений содержит функции, назначение и описание которых приводится ниже:
  1. Функция подготовки к вычислениям (Выполняет стандартную инициализацию MPI и создание некоторых процессорных коммуникаторов и топологий)
    int InitCalc(int argc, char **argv);

  2. Функция завершения вычислений (Производит освобождение захваченной памяти на процессе, а так же уничтожение типов, групп и коммуникаторов)
    void CloseCalc();

  3. Функция ввода начальных данных (Позволяет задать начальные параметры модели, сгенерировать случайное расположение особей в океане и создать типы MPI для передачи данных)
    int InputData(int GridSize, int FishAmount, int SharkAmount, int FishBreed, int SharkBreed, int SharkStarve);

  4. Функция определения начальных параметров модели (Предназначена для определения измений параметров модели, связанных с числом процессов, которые сиспользует программа)
    void ModelParam(int *NProcs, int *GridSize, int *FishAmount, int *SharkAmount, int *NDomSideOcn);

  5. Главная функция пересчёта состояния океана (Это основная функция выполняющая непосредственное моделирование, с учётом особенностей параллельного алгоритма. Эта функция возвращает номер итерации жизни океана)
    int UpdateOcean();

  6. Функция сбора информации о текущем состоянии океане со всех процессов (Выполняет передачу данных о квадрантах океана с вычислительных на 0-й процесс и производит их сборку в единый массив океана)
    int GatherOceanInfo(char** Ocean, int *GridSize);

  7. Функция определения времени выполнения последней операции (Позволяет определить время выполнения ввода нач. данных, пересчёта состояния океана или сбора данных об океане с процессов)
    void GetLastCalcTime(double *Time);