Методичка третья по MATLAB
.pdfРисунок 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.4866e010
Последовательное и параллельное перемножение матриц
Рассмотрим задачу матричного умножения. Например, перемножим произвольную матрицу со значениями меньше единицы и магический квадрат. Сравним результативность работы. Данные приведены в таблице 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