Фокин М.С. статья

advertisement
УДК 004.75: 004.4'2
М.С.Фокин
СРАВНИТЕЛЬНЫЙ АНАЛИЗ ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ
ДЛЯ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ
Аннотация: Представлен сравнительный анализ инструментальных средств,
используемых для параллельного программирования. Описываются основные методы
для создания программ с возможностью использования многоядерной архитектуры.
Ключевые слова: Intel Parallel Studio, параллельные вычисления, OpenMP, MPI,
многоядерные процессоры.
Введение. Большинство персональных компьютеров в наши дни
построено на многоядерной архитектуре, в основном преобладают
двухъядерные и четырёхядерные процессоры. Даже в современных
смартфонах начинают использовать многоядерные процессоры. Данная
тенденция ведет к тому, что количество ядер в процессорах будет
неуклонно расти с каждым годом. На эту тенденцию также влияют такие
факторы, как достигнутый потолок тактовых частот, современная
тенденция к уменьшению электропотребления и тепловыделения.
Данные факторы создают уникальную проблему. До широкого
проникновения многоядерных процессоров увеличить производительность
компьютера можно было путем замены старого процессора на новый с
более высокой тактовой частотой. Программное обеспечение было создано
с привязкой к одному ядру. Эта тенденция привела к тому, что
большинство программного обеспечения, существующего сейчас, не
может
извлечь
никакой
выгоды
от
использования
многоядерных
компьютеров.
Поэтому
выбор
инструментальных
средств
для
создания
высокопроизводительного программного обеспечения, ориентированного
на параллельные архитектуры, является актуальной задачей. Целью данной
работы
является
анализ
основных
средств
параллельного
программирования и проектирования. Для достижения цели необходимо
выполнить следующие этапы:
анализ
-
существующих
инструментальных
средств
для
параллельного программирования;
классификация инструментальных средств для параллельного
-
программирования.
Анализ
инструментальных
средств
для
параллельного
программирования. Для написания параллельного кода необходимо
первым делом определить в программе те участки, которые можно
распараллелить, в основном, это циклы. Это делается при помощи
различных
инструментальных
средств.
В
качестве
основных
инструментальных средств для параллельного программирования можно
выделить следующие продукты:
- Microsoft Visual Studio,
- Intel Parallel Studio,
- OpenMP,
- MPI.
Рассмотрим особенности каждого из перечисленных продуктов
поподробнее.
Microsoft Visual Studio. До выпуска Visual Studio 2010 и .NET
Framework 4 написание кода, способного задействовать для вычислений
более одного ядра было чрезвычайно сложной задачей. .NET Framework 4
включает в себя Parallel Extensions, состоящие из трех новых компонентов:
- Task Parallel Library (TPL),
- PLINQ Execution Engine,
- и набора Coordination Data Structures (CDS).
Обычно, для написания приложения, способного использовать более
одного
вычислительного
ядра, необходимо
выяснить возможности
разделения алгоритма на части, выполняющиеся параллельно. Если для
решения задачи необходимо обработать большой набор данных в
контексте одной программы, то имеет смысл использовать новые
возможности параллельности в .NET Framework 4: Parallel.ForEach и
Parallel LINQ (PLINQ).
Класс Parallel содержит метод ForEach, являющийся многопоточной
версией обычного цикла foreach в C#. Как и обычный foreach,
Parallel.ForEach выполняет итерации над перечислимыми данными, но с
использованием множества потоков.
Родственный с Parallel.ForEach PLINQ представляет собой модель
программирования
для
параллельных
операций
над
данными.
Пользователь определяет операцию из стандартного набора операторов,
включающих в себя проекции, фильтры, агрегирование и т.д. Подобно
Parallel.ForEach, PLINQ достигает параллельности, разбивая входную
последовательность на части и обрабатывая элементы в разных потоках.
Visual Studio 2010 поддерживает параллельные расширения через
новые окна Parallel Stacks и Parallel Tasks, а также инструмент Concurrency
Visualizer. Эти окна дают более полное представление о состоянии
различных задач на разных этапах своего выполнения. Окно Parallel Stacks
показывает, как несколько параллельно выполняемых задач продвигаются
по своим путям, и отображает их стеки вызовов.
Рисунок 1 - Окно Parallel Stacks в Visual Studio 2010
Окно Parallel Tasks было добавлено специально для поддержки новой
модели программирования на основе задач.
Рисунок 2 - Окно Parallel Tasks в Visual Studio 2010
Для более глубокого анализа параллельного приложения в Visual Studio
2010 появился новый инструмент
предназначен
взаимодействует
для
со
— Concurrency Visualizer.
исследования
того,
своей
в
средой
как
условиях
ваше
Он
приложение
многоядерности и
многопоточности. Concurrency Visualizer зависит от механизма Event
Tracing for Windows, а значит, он будет работать только в Windows Vista
или более старших версиях операционной системы.
Intel Parallel Studio. Компания Intel является одним из лидеров в
индустрии параллельных вычислений. Продукт Intel Parallel Studio надстройка для Microsoft Visual Studio 2005/2008/2010, предоставляющая
набор дополнительных инструментов для облегчения и оптимизации цикла
разработки масштабируемых параллельных программ для Windows.
Пакет Intel Parallel Studio состоит из четырёх программ:
- Intel Parallel Advisor,
- Intel Parallel Composer,
- Intel Parallel Inspector,
- Intel Parallel Amplifier.
Эти программы объединены в единый механизм. Продукт Intel Parallel
Advisor помогает найти в коде участки эффективнее работающие при
использовании параллельной обработки.
Рисунок 3 - Цикл разработки приложений с использованием Intel Parallel Studio
Модуль Intel Parallel Composer предназначен для быстрого подключения
средств
параллельной
использованием
обработки
обширного
к
компилятору
набора
языка
библиотек
с
C/C++
с
функциями
многопоточной обработки.
Продукт Intel Parallel Inspector обеспечивает поиск ошибок в коде
приложений для любых моделей параллельного программирования.
Модуль
Intel
Parallel
Amplifier
представляет
собой
анализатор
производительности приложений для поиска узких мест в алгоритме,
которые мешают масштабируемости и увеличению производительности на
мультиядерных платформах.
OpenMP.
Интерфейс
OpenMP
задуман
как
стандарт
для
программирования на масштабируемых SMP-системах в модели общей
памяти. В стандарт OpenMP входят спецификации набора директив
компилятора, процедур и переменных среды.
За счет идеи "инкрементального распараллеливания" OpenMP
идеально подходит для разработчиков, желающих быстро распараллелить
свои вычислительные программы с большими параллельными циклами.
Разработчик не создает новую параллельную программу, а просто
последовательно добавляет в текст последовательной программы OpenMPдирективы.
При этом, OpenMP - достаточно гибкий механизм, предоставляющий
разработчику
большие
параллельного приложения.
возможности
контроля
над
поведением
Поддержка спецификации есть во всех компиляторах Intel, начиная с
шестой версии (OpenMP 2.0 - с восьмой); в компиляторе Microsoft C/C++,
начиная с Visual Studio 2005.
OpenMP идеально портируется. Он не привязывается к особенностям
операционной системы и позволяет создавать переносимые приложения,
использующие потоки и объекты синхронизации.
OpenMP позволяет работать на нескольких уровнях - либо задавать
низкоуровневые объекты вручную, либо указывать, какие переменные
являются "общими" и требуют синхронизации, передоверяя собственно
синхронизацию компилятору.
В
их
основу
положена
идея
использования
специальных
компиляторов ("знающих" про параллельное программирование), для
которых в коде программы расставляются специальные пометкипримечания, указывающие, что и где следует делать параллельно, а что последовательно. Программист же пишет что-то вроде:
…
# ВыполниЭтотУчастокКодаПараллельно
Действие 1
….
Действие n
…,
а компилятор пытается по его замечаниям сориентироваться.
OpenMP ориентируется на так называемые системы с общей
памятью, когда на компьютере запущена всего одна программа (точнее,
один процесс), но внутри этого процесса "живет" несколько потоков
исполнения, каждому из которых доступна вся память процесса, а, стало
быть, и все его данные.
MPI. Еще один стандарт де-факто в мире параллельных вычислений
- пакет MPI, тоже разрабатывавшийся как универсальное средство
облегчения жизни разработчику параллельного ПО. Только устроено оно
совсем иначе, нежели OpenMP, и ориентировано в основном для других
целей.
MPI исходит из другой предпосылки: на компьютере запущено
много-много программ, которые друг с другом напрямую общаться не
могут и вынуждены устанавливать контакт через специальные окна или
даже внешние каналы связи. Тогда на помощь приходит IPC (Inter-Process
Communication), который сильно изменяется от компьютера к компьютеру
и от операционной системе к операционной системе. А MPI - попытка
стандартизировать связь между процессами, предоставив всем желающим
удобную модель запуска на нескольких процессорах тех программ,
которые будут коллективно обрабатывать данные, и обеспечивая
"почтовые пересылки" между этими программами.
MPI
универсален,
он
не
накладывает
практически
никаких
ограничений на приложение, на аппаратное обеспечение, на каналы,
которые используются для связи между компьютерами. Можно в
буквальном смысле слова поставить на стол два компьютера с MPI,
соединить их Ethernet-кабелем - и получить кластер на два процессора, на
котором можно запускать любое MPI-приложение. С помощью этого
интерфейса реализуются программы для самых разных платформ вплоть
до суперкомпьютеров.
MPI можно использовать и для обычных двухъядерных процессоров
или двухпроцессорных систем. Но, конечно, MPI для таких целей не так
эффективен, как OpenMP.
Одним
из
примеров
программного
продукта,
для
создания
высокопроизводительными кластерами на основе MPI является Intel
Cluster Studio. С его помощью можно разрабатывать, анализировать и
оптимизировать производительность параллельных приложений для
кластерных систем с 32- и 64-разрядными архитектурами Intel.
Классификация инструментальных средств для параллельного
программирования. Все
выше
рассмотренные
инструментальные
средства параллельного программирования можно условно разделить на
два вида, для одного компьютера и для вычислительных кластеров, как это
представлено на рисунке 4. Деление является достаточно условным, так
как, к примеру, MPI можно использовать для вычислений и на одном ПК,
но идея MPI предполагает использование нескольких ПК, соединенных
между собой.
Инструментальные средства
Desktop
Claster
OpenMP
MPI
Visual Studio
Intel Cluster Studio
Intel Parallel Studio
Рисунок 4 -Классификация инструментальных средств для параллельного
программирования
Заключение.
Рассмотренные
инструментальные
средства
параллельного программирования позволяют облегчить написания кода и
его оптимизацию для выполнения на многоядерных процессорах.
Распараллеливанию хорошо поддаются программы, в которых: есть
необходимость обрабатывать большое количество информации, основную
часть кода составляют циклы.
В работе представлена классификация инструментальных средств
параллельного программирования, отображающая назначение каждого
продукта.
Список литературы
1.
А.А., Букатов, В.Н., Дацюк, А.И., Жегуло Программирование
многопроцессорных вычислительных систем, 2003. 208c.
2.
Э.,Таненбаум,
М.,
ван
Стеен
Распределенные системы.
Принципы и парадигмы. – СПб.: Питер, 2003. – 877c.: ил.
3.
Visual
Д., Тернер. Более эффективное кодирование с применением
Studio
2010,
MSDN
Magazine
Апрель
2010
URL:http://msdn.microsoft.com/ru-ru/magazine/ee336135.aspx
4.
С., Озеров. Параллельное программирование. 2005г. URL:
http://www.computerra.ru/242551/
5.
В.,Цымбал. Intel Parallel Studio – инструмент для создания
параллельных приложений. 2009 г. URL: http://www.ixbt.com/soft/intelparallel-studio.shtml
Download