Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка третья по MATLAB

.pdf
Скачиваний:
181
Добавлен:
19.03.2015
Размер:
1.28 Mб
Скачать

Рисунок 5. Ввод переменной в pmode

Переменная не обязательно имеет одно и то же значение на каждой лаборатории. Функция labindex возвращает ID каждой лаборатории, работающей над параллельным заданием. В этом примере переменная x имеет различные значения в рабочем пространстве каждой лаборатории.

P>> x = labindex

Функция numlabs возвращает число лабораторий, работающих над задачей:

P>> all = numlabs

Создадим массивы:

P>> segment = [1 2; 3 4; 5 6]

P>> segment = segment + 10*labindex

21

Рисунок 6. Массивы в pmode

После завершения работы с pmode воспользуемся командой

P>> pmode exit

И вернемся в обычное окно.

22

2.6Список функций параллельного MATLAB

matlabpool — Открывает/ закрывает пул для параллельных вычислений;

parfor — Выполняет параллельный цикл;

pctRunOnAllRun — команда для клиента и всех рабочих;

pmode — Открывает Parallel Command Window;

labindex — Индекс лаборатории;

labBarrier — Блокирует выполнение пока все лаборатории не достигнут определенной позиции;

labBroadcast — Отправляет данные ко всем лабораториям, либо получает их;

labindex — Номер лаборатории;

labProbe — Проверяет лабораторию на способность получать сообщения;

labReceive — Получение данных;

labSend — Отправка данных;

labSendReceive — Одновременная отправка и получение данных;

numlabs — Общее число запущенных параллельно лабораторий;

pload — Загрузка файла в параллельную сессию;

psave — Сохранение данных из параллельной сессии;

23

2.7 Примеры программирования параллельных задач

Вычисление определенного интеграла

Решим "классическую" параллельную задачу ­ вычисление значения числа ? . Как известно, значение числа ? равно значению определенного интеграла:

Рисунок 7. Схематическое вычисление определенного интеграла

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

P>> F = @(x) 4./(1 + x.^2) 1: F =

1:@(x) 4./(1 + x.^2)

2:F =

2: @(x) 4./(1 + x.^2) P>>

24

Теперь определим границы интегрирования для каждого рабочего процесса.

P>> a = (labindex ­ 1)/numlabs;

P>> b = labindex/numlabs;

Эти переменные будут определены для каждого рабочего процесса

P>> [a, b]

1:ans =

1:0 0.5000

2:ans =

2: 0.5000 0.1000

Теперь, воспользовавшись функцией quadl(F,a,b), в параметры которой передаются подынтегральная функция и граница интегрирования, вычислим значение определенного интеграла в каждом из рабочих процессов.

P>> myIntegral = quadl(F, a, b)

1:myIntegral =

1:1.8546

2:myIntegral =

2:1.2870

Теперь, после того как в каждой сессии определена переменная myIntegral, необходимо воспользоваться функцией gplus и произвести глобальное суммирование переменной myIntegral по всем процессам.

gplus – gplus(x) возвращает сумму значений переменной x по всем процессам. Результат тиражируется на всех сессиях процессов.

P>> piApprox = gplus(myIntegral)

1:piApprox =

1:3.1416

2:piApprox =

2:3.1416

Для сравнения полученного значения со значением константы pi, которое хранится в системе MATLAB, рассмотрим разность piApprox ­ pi

>> piApprox ­ pi ans =

25

2.4866e­010

Последовательное и параллельное перемножение матриц

Рассмотрим задачу матричного умножения. Например, перемножим произвольную матрицу со значениями меньше единицы и магический квадрат. Сравним результативность работы. Данные приведены в таблице 2.

Полученные на практике результаты показывают, что, уже начиная с размерности 300, параллельное умножение становится более эффективным, чем последовательное.

nПоследовательное Параллельное

 

 

умножение, сек

умножение, сек

 

10

0.002121

1.409595

 

30

0.007993

1.248434

 

50

0.023833

1.304013

 

100

0.385664

1.413358

 

200

2.390259

3.605150

 

300

9.120652

7.699973

 

400

21.725596

18.078723

 

500

43.619011

37.277553

 

700

132.078651

110.891007

 

1000

345.058334

287.419050

Таблица 2. Зависимость времени от размерности матриц

26

Рисунок 8. График зависимости времени выполнения от размерности массива

27

Рисунок 9. График зависимости времени выполнения от размерности массива при малых n

28

2.Заключение

Взаключение следует отметить, что технология параллельных вычислений,

реализованная в MATLAB Parallel Computing toolbox, позволяет решать вычислительные задачи, требующие больших вычислительных мощностей, возникающие в различных областях науки и техники (имитационное моделирование методом Монте­Карло, оптимизация портфеля инвестиций, содержащего большое количество инструментов, идентификация параметров динамической системы, расчет глобальных биогеохимических циклов элементов (например, азота и углерода) для пространственно ­ распределенных моделей экосистем и т.д.).

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

Надо заметить, что значительная часть кода MATLAB, отвечающего за запуск процессов с помощью планировщика, написана на языке Java. Наряду с таким преимуществом, как кроссплатформенность, этот язык обладает существенным недостатком – низкой скоростью реализованного программного кода. Но развитие многоядерных архитектур в скором будущем приведет к тому, что этот недостаток станет несущественным. Использование высокопроизводительных вычислений расширяет область применения и исследования для математических методов.

29

4. Глоссарий

Клиент (client) ­ Сеанс MATLAB, который определяет и представляет задание. Это сеанс, в котором программист обычно разрабатывает и моделирует приложения. Также известный как клиентская сессия MATLAB.

Клиентский компьютер (client computer) – компьютер, на котором запущен клиент.

Кластер (cluster) ­ Несколько компьютеров, соединенных по сети, и предназначеных для общей цели.

Распределенные вычисления (distributed computing) – Вычисление,

выполняемое на нескольких узлах одновременно.

Лаборатория (lab) – После запуска рабочие независимы по умолчанию. Они могут соединиться друг с другом и сотрудничать как равноправные узлы, и тогда упоминаются как лаборатории.

Пул (MATLAB pool) – Несколько лабораторий, зарезервированных клиентом для выполнения параллельных вычислений.

Узел (node) – компьютер, являющийся частью кластера.

Параллельное приложение (parallel application) ­ Приложение, которое выполняется на нескольких лабораториях одновременно, с общими данными и синхронизацией между лабораториями.

Планировщик (scheduler) – процесс (внутренний или внешний), задающий очереди и назначающий задания рабочим.

Рабочий (worker) ­ Процесс MATLAB, который выполняет вычисления.

30