Главная страница

Методичка третья по MATLAB. Курсовая работа Параллельные вычисления в matlab


Скачать 1.22 Mb.
НазваниеКурсовая работа Параллельные вычисления в matlab
АнкорМетодичка третья по MATLAB.pdf
Дата08.03.2018
Размер1.22 Mb.
Формат файлаpdf
Имя файлаМетодичка третья по MATLAB.pdf
ТипКурсовая
#16408

Белорусский государственный университет
Механико­математический факультет
Кафедра численных методов и программирования
Курсовая работа
Параллельные вычисления в MATLAB
Выполнила Кульгавая Елена Александровна,
студентка 3 курса 2 группы, специальность
Web­программирование и Internet­технологии
Научный руководитель
Профессор Волков Василий Михайлович игр нов
2011

Минск, 2010 2
To learn,
to learn and to learn --Vladimir
Ulyanov

Содержание
1.
Введение ……………………………………………………………………… 3
Параллельные вычисления ……………………………………………... 3
Математическая основа параллельных вычислений…………………..4 2.
Основная часть……………………………………………………………….. 5 2.1.
Среда MATLAB………………………………………………………….. 5
Для чего нужен параллельный MATLAB……………………………….5
Почему именно MATLAB………………………………………………..7 2.2.
Parallel Computing Toolbox……………………………………………….8
Главные свойства…………………………………………………………8 2.3.
Разработка параллельных приложений в MATLAB…………………..10
Параллельный цикл……………………………………………………...10
Пример параллельного цикла for……………………………………….11 2.4.
Цикл parfor……………………………………………………………….13
Когда использовать parfor……………………………………………....13
Создание цикла parfor …………………………………………………..13
Различия между циклами for и parfor…………………………………..14 2.5.
Параллельные вычисления с pmode……………………………………16
Принцип работы…………………………………………………………16
Запуск pmode ……………………………………………………………16 2.6.
Список функций параллельного MATLAB……………………………19 2.7.
Примеры программирования параллельных задач……………………20 3

Вычисление определенного интеграла………………………………...20
Последовательное и параллельное перемножение……………………21 3.
Заключение…………………………………………………………………...24 4.
Глоссарий……………………………………………………………………. 25 5.
Список литературы…………………………………………………………..26 6.
Приложение…………………………………………………………………..27 4

Введение
Параллельные вычисления
Многие задачи требуют вычислений с большим количеством операций, которые занимают значительные ресурсы даже на современной технике, более того, можно с уверенностью считать, что каких бы скоростей ни достигла вычислительная техника, всегда найдутся задачи, на решение которых потребовалось бы значительное время. Многие из таких сложных задач требуют, чтобы результат был получен за как можно меньшее время, или даже строго ограниченное. Так, современные проблемы "большого вызова" возможностям современной науки и техники: моделирование климата, генная инженерия, проектирование интегральных схем, анализ загрязнения окружающей среды, создание лекарственных препаратов и др., ­ требуют для своего анализа ЭВМ с производительностью более 1000 миллиардов операций с плавающей запятой в сек. (1 террафлопс). С другой стороны представляет большую техническую проблему уменьшение времени исполнения каждой операции в микропроцессоре. Очевидным способом увеличить скорость вычислений было бы применение не одного вычислительного устройства, а нескольких, работающих совместно над решением одной задачи. Такой подход носит название параллельных вычислений. Несмотря на кажущуюся простоту решения, оно является подчас весьма нетривиальной задачей по проектированию вычислительной техники и разработке алгоритмов. Первая проблема кроется в том, что для того, чтобы задачу можно было решить с помощью параллельных вычислений, алгоритм её решения должен допускать распараллеливание, мало того, далеко не каждая задача может быть решена параллельным алгоритмом. Другой же, не менее важной проблемой является построение системы, на которой бы возможна была реализация параллельных вычислений.
Параллельные вычисления могут ускорить оптимизационный процесс, при условии, что вычисления требуют намного больше времени, чем отправка,
5
получение и обработка данных. Однако, эффективное планирование операций и контроль системы – комплексная трудноразрешимая задача.
Традиционно программа писалась как последовательность вычислений.
Она выполнялась на одном компьютере, имеющем один центральный процессор. Инструкции программы выполнялись одна за другой. Некоторые из сегодняшних программ пытаются использовать мультипроцессоры для вычислений. Программа разбивается на части, которые могут быть решены одновременно. Эти части вычисляются на различных процессорах.
Вычислительные ресурсы могут содержать компьютер с мультипроцессором, несколько компьютеров, соединенных по сети, либо и то и другое.
В условиях перехода производителей процессоров к многоядерным архитектурам параллельное программирование становится насущным инструментом каждого продвинутого программиста и исследователя.
Стандартом де­факто параллельного программирования является интерфейс передачи сообщений (MPI), но освоить его удается не всем. Поэтому создатели пакетов программ, среди которых MathWork, Inc., озаботились внедрением параллельных и распределенных вычислений в свои пакеты.
Математическая основа параллельных вычислений
Параллельные вычисления возможны тогда, когда отсутствует необходимость в завершении предыдущей операции для начала следующей. В качестве примера можно взять следующее выражение:
для того, чтобы произвести второе умножение не требуется знать результата первого, следовательно, оба умножения можно произвести параллельно, и только после этого произвести сложение. Очевидно, не каждое вычисление можно распараллелить. Выражение можно вычислить только последовательно, сначала первое умножение, затем второе, и только после этого — сложение.
6

1. Основная часть
2.1 Среда MATLAB
MATLAB ­ одна из наиболее широко используемых математических вычислительных сред для технических вычислений. MATLAB начинался в
1970­е как интерактивный интерфейс для EISPACK и LINPACK. С тех пор среда расширилась до функционально богатого продукта, использующего современные числовые библиотеки, такие как ATLAS и FFTW, и с инструментариями во многих прикладных областях, например, математика финансирования, нейронные сети и теория управления. MATLAB обеспечивает встроенный язык сценариев, близкий к C и HPF, и гибкая матричная индексация, что делает MATLAB очень подходящим для программирования матричных задач. Также он содержит обработчики языка программирования JAVA, что делает интеграцию откомпилированных программ простой. MATLAB стал популярным благодаря дружественному интерфейсу. Он широко используется как обучающий инструмент, а хорошие графические возможности позволяют анализировать данные. Кроме того исследователи строят очень сложные системы с использованием языка
MATLAB и инструментариев.
Для чего нужен параллельный
MATLAB
?
Из­за внедрения в серийные числовые библиотеки, MATLAB всегда был серийной программой. В 1995 г. Клив Молер (Mathworks) написал статью
«Почему параллельный MATLAB не нужен»(26), утверждая, что Mathworks не собирался разрабатывать параллельный MATLAB в то время. Главные его аргументы были следующими:
1) Модель памяти
Распределенная память была доминантной моделью для параллельных вычислений, и для приложений линейной алгебры сборка/разборка матрицы занимала слишком много времени чтобы эти вычисления были стоящими.
2) Степень детализации
7

При типичном использовании, MATLAB большинство времени проводит в анализаторе, интерпретаторе и графических подпрограммах, где трудно найти какой­либо параллелизм. Кроме того, для того, чтобы обработать параллельное приложение, которое требует сбора результатов в конце,
MATLAB потребуются фундаментальные изменения в архитектуре.
3) Коммерческая сторона
Нехватка покупателей с параллельными компьютерами, для поддержания разработки.
Прошло 8 лет со времени написания статьи, и уже видны огромные изменения в мире вычислений. Эти изменения лишили законной силы все аргументы в пользу того, что параллельный MATLAB не нужен.
1) Модель памяти
Поскольку сложность современных научных и технических задач растет, заметно возрастают время вычисления и требуемые объемы и конфигурация памяти. Рост скорости процессора и объема памяти, доступной на отдельной машине, не может догнать темпа роста требований к вычислениям. Очень часто для текущих научных задач просто не хватает памяти отдельного компьютера, что делает параллельные вычисления необходимостью. В сочетании с улучшениями технологий сетевого соединения, параллельное вычисление стало стоящей задачей.
2) Степень детализации
За прошедшие 8 лет параллельные проекты MATLAB, некоторые состоящие всего из 2­х м­ файлов показали, что несколько экземпляров MATLAB, запущенным на параллельном компьютере могут быть использованы для решения затруднительных параллельных задач без изменений в архитектуре самой среды. Кроме того увеличение размеров задач и скорости процессора сократили время, затраченное на невычислительные подпрограммы.
3) Коммерческая сторона
Мощности современных процессоров вполне достаточно для решения элементарных шагов большинства задач, а объединение нескольких десятков таких процессоров позволяет быстро и эффективно решать многие
8
поставленные задачи, не прибегая к помощи мэйнфреймов и суперкомпьютеров.
При отсутствии высококвалифицированных параллельных программистов кластеры Beowulf создаются и используются людьми с минимальным опытом параллельного программирования. В самом деле, кластеры Beowulf обеспечивают университеты с ограниченными ресурсами хорошей платформой для изучения параллельного программирования и недорогой производительной вычислительной системой для ученых. Beowulf ­ это система, обычно состоящая из одного серверного узла и одного или более клиентских узлов, соединенных при помощи Ethernet или некоторой другой сети. Кроме того, доминирующий способ параллельного программирования, MPI, слишком низкого уровня и слишком склонен к ошибкам. MATLAB известен своей дружественностью. Таким образом, имеется огромный потенциальный рынок для параллельных вычислений MATLAB.
Почему именно
MATLAB
?
Кроме MATLAB имеются две другие очень популярные технические вычислительные среды. Первая – это Maple®, разработанная Maplesoft, широко известная своими отличными возможностями символических вычислений. Затем Mathematica®, разработанная Wolfram Research, с возможностями процедурного языка программирования. Плюсы MATLAB заключается в следующем:
1)
Популярность MATLAB
В сравнении с Maple и Mathematica, существует ощущение, что параллельный
MATLAB достиг бы более широкой аудитории. Чтобы получить общее представление о популярности этих трех пакетов сделаем запросы в Google,
Rambler, Yahoo, CiteSeer, для числа цитат:
9

Google
Rambler
Yahoo
CiteSeer
MATLAB
18 900 000 31 000 55 100 670 20 922
Maple
15 300 000
Common word
5 090 046 5 201
Mathematica
Wolfram
792 000 4 000 3 680 012 486
Таблица 1. Поиск 3 популярных матпакетов, выполненный 15 мая 2010г.
2)
Дружелюбность к пользователю
Опыт использования всех 3­х пакетов показывает, что у MATLAB наилучший пользовательский интерфейс.
10

2.2
Parallel Computing Toolbox™
Parallel Computing Toolbox позволяет решать значительные по объему данных и вычислений задачи, используя MATLAB® и Simulink® на мультиядерных и мультипроцессорных компьютерах. Конструкции параллельной обработки, такие как параллельные циклы for, распределенные массивы, параллельные числовые алгоритмы, и функции передачи сообщений позволяют осуществлять параллельные алгоритмы в MATLAB на высоком уровне, без программирования для специальных аппаратных средств и сетевых архитектур. В результате преобразование последовательных приложений MATLAB в параллельные требует незначительных изменений кода и не требует программирование на языке нижнего уровня вообще.
Приложения запускаются в интерактивном режиме или офлайн, в пакетных средах.
Главные свойства

Поддержка разработки параллельных приложений.

Способность аннотировать сегменты кода при помощи функций parfor
(параллельны для циклов), и spmd (множественные данные отдельной программы) для осуществления параллельных алгоритмов.

Конструкции высокого уровня, такие как распределенные массивы, парал­
лельные алгоритмы и функциям передачи сообщений для обработки боль­
ших наборов данных на мультипроцессорах.

Возможность запустить до 8 рабочих на многоядерном компьютере

Интеграция с MATLAB Distributed Computing Server для приложений, использующих большее число рабочих

Интерактивные и пакетные режимы выполнения
11

Рисунок 1. Разработка параллельных приложений с Parallel Computing
Toolbox.
Этот Toolbox позволяет приложению работать с восемью локальными рабочими (слева) и с MATLAB Distributed Computing Server (справа).
Parallel Computing Toolbox можно использовать для запуска приложения на отдельном многоядерном либо многопроцессорном компьютере. Не изменяя код, то же самое приложение может быть запущено на кластере.
Рисунок 2. Диаграмма улучшения на 4­х ядерном процессоре, массив
3000х3000 12

2.3 Разработка параллельных приложений в MATLAB
Параллельный цикл
Многие приложения содержат повторяющиеся сегменты кода. Часто, для решения задачи в таких случаях используется цикл for. Возможность параллельно выполнить код на отдельном компьютере, либо на кластере может значительно улучшить производительность:
1) Приложения, включающие перемещение параметров

Большое число итераций – Перемещение может занять много времени из­за числа итераций. Каждая итерация может выполняться довольно быстро, но на выполнение тысяч или миллионов таких итераций уйдет много времени.

Длинные итерации – Перемещение может и не содержать большого числа итераций, однако каждая из них может долго выполняться.
Как правило, единственное различие между итерациями определено различными входными данными. В этих случаях способность выполнить отдельные итерации одновременно может значительно улучшить производительность. Выполнение таких итераций параллельно является идеальным способом обработки больших или множественных наборов данных. Единственное ограничение заключается в том, что итерации не могут зависеть друг от друга.
2)
Наборы программ с независимыми сегментами, выполняющие ряд несвязанных задач, можно выполнять одновременно на отдельных ресурсах. Цикл for обычно не применяется для таких отчетливо различных задач, однако параллельный цикл for может стать подходящим решением.
Parallel Computing Toolbox улучшает производительность выполнения таких циклов, позволяя нескольким рабочим выполнять отдельные итерации цикла одновременно. Например, цикл из 100 итераций можно запустить на кластере из 20 рабочих так, чтобы одновременно каждый рабочий выполнял пять итераций. Конечно, скорость работы не улучшится в 20 раз из­за сетевого
13
трафика, однако ускорение будет существенным. Даже запуск локальных рабочих на одной машине показывает существенное улучшение производительности на многоядерном компьютере. Итак, независимо от того, занимает ли цикл много времени из­за числа итераций, или из­за их размеров, скорость работы можно увеличить, распределяя итерации между рабочими
MATLAB.
Пример параллельного цикла for
Этот раздел показывает, как изменить простой цикл for так, чтобы он выполнялся параллельно. Этот пример показывает технические различия, и существенных улучшений мы не увидим.
1.
Пусть наш цикл содержит цикл для вычисления значений синусу и графического его отображения.
for i=1:1024
A(i) = sin(i*2*pi/1024);
end plot(A)
2.
Чтобы в интерактивном режиме выполнить код, содержащий параллельный цикл, необходимо сначала открыть пул MATLAB. Это зарезервирует несколько рабочих сессий для выполнения итераций цикла. Он может содержать локальных рабочих, либо запущенных на кластере:
matlabpool open local 3 3.
После этого изменяем исходный код, для его параллельного выполнения:
parfor i=1:1024
A(i) = sin(i*2*pi/1024);
end plot(A)
14

Единственное различие в этом цикле ­ ключевое слово parfor вместо for.
После того, как цикл выполняется, результаты выглядят так же, как и сгенерированные в предыдущем цикле.
Рисунок 3. Параллелизация цикла for
Поскольку итерации работают параллельно во всех сеансах MATLAB, каждая итерация должна быть полностью независимой от всех других итераций. Рабочий, вычисляющий значение для A(100), может не быть рабочим, вычисляющим A(500). Нет никакой гарантии последовательности такой, чтобы A(900) вычислялся раньше, чем A(400). Значения всех элементов массива A доступны в клиентской сессии MATLAB, после того, как все данные возвращаются от рабочих MATLAB и цикл завершается.
4.
После завершения вычислений закрываем пул.
matlabpool close
15

2.4 Цикл parfor
Фундаментальное понятие parfor­цикла в MATLAB такое же, как и у стандартного цикла for: MATLAB выполняет ряд операций (тело цикла) в диапазоне значений. Часть тела цикла parfor выполняется на клиенте
MATLAB (где parfor запущен), и часть выполняется параллельно на рабочих
MATLAB. Необходимые данные, которые обрабатывает parfor, отправляются от клиента рабочим, где и происходит большая часть вычислений, затем результаты отсылаются назад клиенту и объединяются.
Поскольку несколько рабочих MATLAB могут обрабатывать данные одновременно в теле одного цикла, parfor­цикл может обеспечить значительно лучшую производительность, чем его аналог цикл for.
Каждое выполнение тела parfor­цикла ­ итерация. Рабочие MATLAB выполняют итерации беспорядочно и независимо друг от друга. Поскольку все итерации независимы, нет никакой гарантии синхронизированности итераций, так же как и нет потребности в этом. Если число рабочих равно числу итераций цикла, каждый рабочий выполняет одну итерацию. Если итераций больше, чем рабочих, некоторые рабочие выполняют более одной итерации; в этом случае, рабочий может получить несколько итерации сразу, чтобы уменьшить время коммуникации.
Когда использовать parfor
?
Цикл parfor полезен в ситуациях, где есть необходимость выполнить много простых итераций. Parfor делит итерации цикла на группы так, чтобы каждый рабочий выполнял некоторую часть общего количества итераций.
Циклы parfor также полезны, когда выполнение итерации цикла занимает много времени, ведь рабочие могут выполнять итерации одновременно.
Цикл parfor нельзя использовать, когда итерации цикла зависят от результатов других. Каждая итерация должна быть независимой от всех других. Поскольку некоторое количество времени тратится на коммуникации,
16
этот цикл не целесообразно использовать для небольшого количества простых вычислений.
Создание цикла parfor
Цикл for, в котором все итерации полностью независимы друг от друга,
­ хороший кандидат на parfor­цикл. В основном, если одна итерация зависит от результатов другой, не представляется возможным преобразовать такой цикл в parfor.
Этот пример показывает эквивалентные последовательный (слева) и параллельный (справа) циклы.
clear A
for i = 1:8
A(i) = i;
end
A
clear A
parfor i = 1:8
A(i) = i;
end
A
В этом примере видно, что каждая итерация зависит только от своего номера, и не зависит от результатов других итераций.
Различия между циклами for и parfor
Поскольку циклы parfor ­ не совсем то же самое, что и циклы for, есть некоторые особенности их использования. Из предыдущего примера можно заметить, что массив, проиндексированный в теле цикла, доступны после его завершения. Однако предположим, что в цикле используется неиндексированная переменная. Рассмотрим следующий пример:
clear A
d = 0; i = 0;
for i = 1:4
d = i*2;
A(i) = d;
end
A
d i
clear A
d = 0; i = 0;
parfor i = 1:4
d = i*2;
A(i) = d;
end
A
d i
Хотя элементы массива А будут одинаковыми в обоих случаях, значения переменной d будут различными. В цикле слева итерации выполняются последовательно, таким образом, d будет иметь значение, принятое в последней итерации цикла. В parfor­цикле справа, итерации
17
выполняются параллельно, а не последовательности, таким образом невозможно определить значение d до завершения цикла. Это также относится к переменной цикла, i. Поэтому, поведение цикла parfor определяется так, что оно не затронуло значения d и i вне цикла вообще. Их значения остаются неизменными до и после цикла. Итак, цикл parfor требует, чтобы весь код, который следует за циклом не, зависел от последовательности итераций цикла. Результат выполнения:
A =
2 4 6 8
d =
8
i =
4
A =
2 4 6 8
d =
0
i =
0
Рассмотрим следующий пример:
Попытаемся посчитать последовательность Фибоначчи f = zeros(1,50);
f(1) = 1;
f(2) = 2;
parfor n = 3:50
f(n) = f(n­1) + f(n­2);
end
Этот цикл написан некорректно, поскольку значение f в каждой итерации зависит от результата выполнения других итераций.
18

2.5 Параллельные вычисления с pmode
С помощью этого режима непосредственно из командного окна
MATLAB становится возможным обращение к процессам рабочих, просмотр их локальных переменных, обмен данными между ними. В режиме pmode команды, вводимые в рабочем окне MATLAB, будут исполняться всеми рабочими процессами. Режим pmode чаще всего используется как средство отладки параллельных программ.
Принцип работы
Pmode позволяет интерактивно выполнять параллельное задание, выполняемое одновременно на нескольких лабораториях. Команды, набираемые в Parallel Command Window, выполняются на всех лабораториях.
Каждая лаборатория выполняет команды в собственном рабочем пространстве и с собственными переменными.
Путь синхронизации лабораторий заключается в том, что каждая лаборатория после завершения команды простаивает, ожидая, пока все лаборатории, работающие над этим заданием, не завершат ту же команду.
Только, после того, как все лаборатории завершат выполнение одной команды, они все вместе переходят к следующей pmode команде.
Pmode предоставляет дисплей для каждой лаборатории, выполняющей задание, где можно вводить команды, смотреть результаты, обращаться к рабочему пространству каждой лаборатории, и т.д. Что pmode не позволяет делать, так это свободно чередовать последовательную и параллельную работу. После выхода из сеанса pmode, вся информация и данные на лабораториях стираются. Старт следующего сеанса pmode всегда начинается с пустого состояния.
Запуск pmode
Этот пример использует местного планировщика и запускает лаборатории на локальной машине. Такой запуск не требует внешнего
19
кластера или планировщика. Шаги включают подсказку pmode (P>>) для команд, набираемых в Parallel Command Window.
1.
Запустим pmode с помощью команды pmode.
pmode start local 2
Это запустит две местные лаборатории, создает параллельное задание для работы с ними, и открывает Parallel Command Window.
Рисунок 4. Запуск Parallel Command Window
Для иллюстрации того, что команды в pmode выполняются на всех лабораториях, наберем следующее:
P>> help magic
Введем переменную в pmode:
P>> x = pi
20

Рисунок 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
— Выполняет параллельный цикл;

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

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

31

5. Список литературы
1. The MathWorks. Parallel Computing Toolbox User’s Guide. 2008 2. Parallel MATLAB: Doing it Right Ron Choy, Alan Edelman Massachusetts
Institute of Technology, Cambridge, MA 02139 3.
Н.Н. Оленев, Р.В. Печенкин, А.М.Чернецов Параллельное про­
граммирование в MATLAB и его приложения. М.: ВЦ РАН, 2007. 120 с.
4.
В.П. Гергель, Р.Г. Стронгин Основы параллельных вычислений для многопроцессорных вычислительных систем. Нижний Новгород, 2003 5.
C. Moler. Why there isn’t a parallel matlab. Cleve’s corner , Mathworks
Newsletter, 1995.
6.
Parallel MATLAB Survey. http://www.interactivesupercomputing.com/reference/parallelMatlabsurvey.php
7. B. Barney. Introduction to Parallel Computing https://computing.llnl.gov/tutorials/parallel_comp/
, 2009 8.
http://www.mathworks.com/
9.
http://matlab.exponenta.ru/
10.
http://wikimedia.org/
11.
http://www.wikiznanie.ru
32

6. Приложение
1. Пример последовательного и параллельного циклов
Последовательный цикл:
for i=1:1024
A(i) = sin(i*2*pi/1024);
end plot(A)
Параллельный цикл matlabpool open local 2
parfor i=1:1024
A(i) = sin(i*2*pi/1024);
end plot(A)
matlabpool close
2. Пример цикла с независимыми друг от друга итерациями
Последовательный цикл:
clear A
for i = 1:8
A(i) = i;
end
A
Параллельный цикл matlabpool open local 2
clear A
parfor i = 1:8
A(i) = i;
end matlabpool close
3.
Последовательность Фибоначчи. Пример не параллелизуемого цикла.
f = zeros(1,50);
f(1) = 1;
f(2) = 2;
parfor n = 3:50 33
f(n) = f(n­1) + f(n­2);
end
4.
Работа с Parallel Command Window pmode start local 2
help magic x = pi x = labindex all = numlabs segment = [1 2; 3 4; 5 6]
segment = segment + 10*labindex
F = @(x) 4./(1 + x.^2)
a = (labindex ­ 1)/numlabs;
b = labindex/numlabs;
[a, b]
myIntegral = quadl(F, a, b)
piApprox = gplus(myIntegral)
piApprox ­ pi pmode exit
5. Последовательное и параллельное перемножение матриц
Последовательный цикл:
clear;
n = 10;
tic;
parfor i = 1:n
M = magic(n);
R = rand(n);
A(i) = sum(M(i,:).*R(n+1­i,:));
end toc
Параллельный цикл matlabpool open local 2
clear;
n = 10;
tic;
for i = 1:n
M = magic(n);
R = rand(n);
A(i) = sum(M(i,:).*R(n+1­i,:));
34
end toc matlabpool close
6. Поиск суммы, произведения и максимального члена ряда в параллельном цикле matlabpool open local 2
clear;
n = 10;
x = rand(n, 1);
total = 0.0;
big = ­Inf;
fact = 1;
for i = 1:n total = total + x(i);
big = max(big, x(i));
fact = fact*x(i);
end matlabpool close
7. Неверное задание индексации параллельного цикла
>> parfor i=1:2:10 % не последовательная индексация
>> parfor i=­5.1:10.3 % не целые индексы
>> parfor i=[5;6;7;8] % индексы не образуют ряд
35


написать администратору сайта