Статья: Распределенные вычисления на FreePascal под Windows

Все вышеописанное относилось к установке собственно MPICH. Для того, чтобы прикрутить библиотеки MPICH к FreePascal, следует еще немножко поработать.

Cледует воспользоваться динамической библиотекой mpich.dll, которая располагается в системном каталоге (копируется туда при установке MPICH).

1. Скачать модуль FreePascal, реализующий функции этой динамической библиотеки. Файл mpi.pp скачать zip-архив (10 КБ)

2. Для использования модуля mpi следует просто скопировать файл mpi.pp в каталог, где FreePascal ищет модули (unit searchpath).

Модуль написан с использованием утилиты h4pas.exe и заголовочных файлов *.h из SDK\Include.

Простейшая MPI программа на FreePascal.

Во именах всех функциях библиотеки MPICH используется префикс MPI_. Возвращаемое значение большинства функций — 0, если вызов был успешным, а иначе — код ошибки.

Основные функции.

Основные функции MPI, с помощью которых можно организовать параллельное вычисление

1 MPI_Init подключение к MPI
2 MPI_Finalize завершение работы с MPI
3 MPI_Comm_size определение размера области взаимодействия
4 MPI_Comm_rank определение номера процесса
5 MPI_Send стандартная блокирующая передача
6 MPI_Recv блокирующий прием

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

Описание функций, осуществляющих передачу, оставим на потом, а сейчас рассмотрим описание функций инициализации/завершения

function MPI_Init( var argc : longint;

var argv : ppchar) : longint;

Инициализация MPI. Аргументы argc и argv — переменные модуля system, определяющие число параметров командной строки и сами эти параметры, соответственно.

При успешном вызове функции MPI_Init создается коммуникатор ( область взаимодействия процессов), под именем MPI_COMM_WORLD.

function MPI_Comm_size( comm : MPI_Comm;

var nump : longint) : longint;

Определяет число процессов, входящих в коммуникатор comm.

function MPI_Comm_rank( comm : MPI_Comm;

var proc_id : longint) : longint;

Определяется ранг процесса внутри коммуникатора. После вызова этой функции все процессы, запущенные загрузчиком MPI-приложения, получают свой уникальный номер (значение возвращаемой переменной proc_id у всех разное). После вызова функции MPI_Comm_rank можно, таким образом, назначать различным процессам различные вычисления.

functionnn MPI_Finalize : longint;

Завершает работу с MPI.

Порядок вызова таков:

1. MPI_Init — подключение к MPI

2. MPI_Comm_size — определение размера области взаимодействия

3. MPI_Comm_rank — определение номера процесса

4. Далее идет любая совокупность команд обмена (передача, прием, и тп.)

5. MPI_Finalize — завершение работы с MPI

К-во Просмотров: 396
Бесплатно скачать Статья: Распределенные вычисления на FreePascal под Windows