Параллельное программирование | Статья в сборнике международной научной конференции

Отправьте статью сегодня! Журнал выйдет 14 ноября, печатный экземпляр отправим 18 ноября.

Опубликовать статью в журнале

Автор:

Рубрика: 1. Информатика и кибернетика

Опубликовано в

VIII международная научная конференция «Технические науки в России и за рубежом» (Краснодар, июнь 2019)

Дата публикации: 07.06.2019

Статья просмотрена: 391 раз

Библиографическое описание:

Денисенко, А. А. Параллельное программирование / А. А. Денисенко. — Текст : непосредственный // Технические науки в России и за рубежом : материалы VIII Междунар. науч. конф. (г. Краснодар, июнь 2019 г.). — Краснодар : Новация, 2019. — С. 3-7. — URL: https://moluch.ru/conf/tech/archive/332/15178/ (дата обращения: 01.11.2020).



Рассмотрены ключевые понятия параллельных компьютерных систем и популярные технологии параллельного программирования.

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

Параллельное программирование по праву считается наиболее перспективным и востребованным направлением в области разработки программного обеспечения. Это связано с известным противоречием: возрастающая сложность промышленных, технических и научных задач, решаемых с помощью компьютерных систем, предъявляет к последним требования производительности, которые не могут быть выполнены, ввиду ограничений, накладываемых законами физики (предельная скорость света, теплоотдача, принцип неопределенности). Однако, такие задачи решать нужно. Поэтому единственным выходом из этой ситуации является использование идеи параллелизма вычислений (хотя и на эту идею накладывается ограничение в виде математического закона Амдала). Теоретически параллелизм можно вводить на любом уровне абстракции компьютерной системы. На каком бы уровне он не был введен, там будет существовать коммутация, а, следовательно, управление и программирование. Именно многоуровневость является основным фактором разнообразия средств и технологий параллельного программирования. Чтобы не запутаться в этом разнообразии укажем на два полезных общих понятия: классификация и связность компьютерных систем. В свете этих понятий рассмотренные ниже технологии параллельного программирования выстроятся в четкую логическую структуру.

Классификация компьютерных систем. Разнообразие способов организации параллельных вычислительных систем побудило научный мир к решению задачи классификации. Самая ранняя и наиболее известная классификация М. Флинна (M. Flynn) предложена в 1966 году. Ключевое понятие здесь — поток. На основе числа потоков команд и потоков данных Флинн делит все системы на четыре класса архитектур:

– SISD (Single Instruction stream/Single Data stream) — одиночный поток команд и одиночный поток данных. К этому классу относятся машины классического, фон-неймановского типа.

– SIMD (Single Instruction stream/Multiple Data stream) — одиночный поток команд и множественный поток данных. Здесь один поток команд манипулирует множественными (векторными) данными. В качестве известного примера можно привести технологию SSE компании Intel.

– MISD (Multiple Instruction stream/Single Data stream) — множественный поток команд и одиночный поток данных. К этому классу относят отказоустойчивые системы.

– MIMD (Multiple Instruction stream/Single Data stream) — множественный поток команд и множественный поток данных. К этому классу относятся мультипроцессорные системы.

На рисунке 1 показано схематическое представление рассмотренной классификации, взятое из работы [1]. Здесь приняты следующие условные обозначения: УУ — устройство управления, ПД — память данных, ПР — процессорные элементы. Данная классификация является самой распространенной. С её помощью можно определить базовые принципы работы компьютерной системы. Однако, она не является единственной. В работе [1] рассмотрено множество других классификаций.

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

Рис. 1. Классификация компьютерных архитектур М. Флинна

Связность параллельных компьютерных элементов исистем. По характеру интеграции компьютерные системы делятся на два больших класса: сильно связанные (tightly coupled) и слабо связанные (loosely coupled). Эти два класса плавно переходят в друг друга. Предельный случай сильно связанных систем — это внутрипроцессорный параллелизм. Предельный случай слабо связанных — распределенные вычислительные системы (grid computing). Рисунок 2 иллюстрирует связность систем на шкале связности [4]. Здесь под цифрами соответственно обозначены:

  1. Внутрипроцессорный параллелизм. К этому классу относятся такие технологии: параллелизм на уровне команд процессора (суперскалярность), процессоры с сверхдлинным командным словом (VLIW, Very Long Instruction Word), внутрипроцессорная многопоточность (on-chip multithreading). Как правило программист не имеет доступ на этот уровень. Система работает автоматически.
  2. Сопроцессоры. Представляют собой дополнительные процессоры, предназначенные для обработки специализированных данных: ввода-вывода, чисел с плавающей точкой, графических, сетевых, криптографических и др. Как и всякий процессор сопроцессор является программируемым. Пример реализации — технологии MMX,SSE.
  3. Мультипроцессоры. К этому классу относятся системы, в которых процессоры используют общую физическую память. Самыми популярными технологиями параллельного программирования здесь являются: поточное программирование (потоки ОС), OpenMP (Open Multi-Processing), Intel TBB (Threading Building Blocks), Boost.
  4. Мультикомпьютеры. Здесь процессоры используют собственную локальную память. Ввиду этого взаимодействие между ними организовано посредством коммуникационной сети. К мультикомпьютерам относятся такие известные системы как IBM BlueGene/L, Red Storm, кластер Google. Программирование систем этого класса осуществляется посредством таких технологий как MPI (Message-Passing Interface), PVM (Parallel Virtual Machine), Linda, Express, OpenCL (Open Computing Language), mpC, Fortran-DVM, C-DVM, MapReduce, Hadoop.
  5. Распределенные вычислительные системы. Полноценных технологий программирования этого уровня пока не существует. Поэтому разработчики пользуются уже существующими технологиями уровня мультикомпьютинга, а для коммуникации применяют сетевые технологии. В настоящее время организацией Global Grid Forum создан стандарт OGSA (Open Grid Services Architecture), который определяет предоставляемые системами услуги и протоколы доступа к ним.

Рис. 2. Шкала связности параллельных компьютерных систем

Рассмотрим перечисленные выше технологии программирования в порядке связности систем.

Программирование сопроцессораSSE. SSE — это SIMD расширение процессоров Intel. Большим плюсом при использовании инструкций SSE является то, что не нужно при этом решать главную задачу параллельного программирования — задачу синхронизации. Программирование, при этом, ничем не отличается от последовательного. Просто вместо скалярных операндов здесь используются векторные.

Поддержка SSE реализована во многих современных компиляторах. На рисунке 3 показаны примеры использования SSE инструкций во встроенных ассемблерах Microsoft Visual Studio 2010 и Embarcadero Rad Studio XE8.

Рис. 3. SSE в ассемблерах самых популярных IDE

В этих примерах происходит перемножение векторов. Параллельность работы заключается в том, что это действие происходит за один такт работы процессора. Таким образом, это классический пример SIMD архитектуры.

За время своего существования технология SSE эволюционировала до SSE4. Основные усовершенствования технологии: большая разрядность регистров, более широкий набор инструкций, инструкции для обработки специализированных данных [2].

Многопоточное программирование. Примитивы операционных систем. Во всех современных операционных системах реализована возможность распределения вычислительных мощностей процессора. Это достигается за счет многозадачности — свойства операционной системы обеспечивать параллельную (или псевдопараллельную) работу процессов (process). При запуске любой программы, операционная системы создает для неё процесс, который состоит из исполняемой программы (код и данные), виртуального адресного пространства (address space), ресурсов, выделяемых процессу и, как минимум, одного потока управления (thread of execution). В виртуальном адресном пространстве одного процесса может действовать несколько потоков. Если эти потоки являются взаимодействующими, то для организации их работы нужно решать задачу синхронизации [3]. Основные функции для работы с потоками показаны на рисунке 4.

Рис. 4. Основные функции для работы с потоками

Всего в библиотеке WinAPI определено 49 функций для работы с потоками.

Итак, в чем состоит задача синхронизации работы взаимодействующих потоков? Она состоит в задаче корректного доступа потоков к общему, критическому ресурсу. Если она надлежащим образом не решена, то потоки могут зависнуть. Возникнет их взаимоблокировка (тупиковая ситуация), либо состояние гонок. Для решения этой задачи в операционных системах реализованы следующие примитивы синхронизации:

Критические секции (critical section)

–Функции ожидания (wait functions)

События (event)

Мьютекс (mutex)

Семафор (semaphore)

Примитивы синхронизации, описанные разными стандартами и реализованные в разных операционных системах, имеют схожий интерфейс.

Многопоточное программирование мультипроцессоров. OpenMP. Стандарт OpenMP реализован в языках программирования C/С++ и Fortran и работает как в Unix, так и в Windows системах. Технология представляет собой набор особых директив компилятора, процедур и переменных окружения. Процесс программирования сводится (в упрощенной форме) к вставке директив в места где код может быть распараллелен [1]. Сказанное иллюстрируется рисунком 5.

Рис. 5. Применение технологии OpenMP

На этом рисунке код в параллельной секции создаст потоки ОС (количеством равным количеству ядер процессора), которые совместно выполнят все итерации этого цикла.

Заключение. Мы рассмотрели основные популярные технологии параллельного программирования, указали на ключевые понятия, которые позволяют комбинировать эти технологии и находить общие архитектурные решения. Однако, тема статьи настолько обширна, что достойное раскрытие её возможно в рамках толстых томов монографий. Так мы, не коснулись важного вопроса в этой области — вопроса разработки параллельных алгоритмов. Так же мы опустили вопрос разработки и дискретизации математической модели. Тем не менее, рассмотренные технологии и понятия достаточны для введения в этот раздел программирования.

Литература:

  1. Воеводин В. В., Воеводин Вл.В. Параллельные вычисления. — СПб.: БХВ-Петербург., 2002. — 600 с.
  2. Качко Е. Г. Параллельное программирование: Учебное пособие. — Харьков: Форт, 2011. — 528 с.
  3. Лупин С. А., Посыпкин М. А. Технологии параллельного программирования. — М.:ФОРУМ, 2011. — 208 с.
  4. Таненбаум Э. Архитектура компьютера. — СПб.:Питер, 2009. -844 с.
Основные термины (генерируются автоматически): SSE, система, параллельное программирование, SIMD, класс, компьютерная система, поток, виртуальное адресное пространство, внутрипроцессорный параллелизм, операционная система.

Ключевые слова

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

Похожие статьи

Обзор методов организации параллельных вычислений

Соответствующая система классификации основана на рассмотрении числа потоков

На основе числа потоков команд и потоков данных Флинн выделяет четыре класса архитектур

SISD: последовательные ЭВМ. SIMD: ЭВМ с конвейерной, функциональной или матричной...

Отчет о создании стекового микропроцессора на основе ПЛИС...

Введение. Современные САПР цифровых систем (ЦС) предоставляют наряду с возможностью схематического проектирования, разработку ЦС при помощи языков аппаратного проектирования (HDL).

Основы параллельной работы программ | Статья в журнале...

Статья посвящена крайне важному аспекту в работе любой вычислительной системы на сегодняшний день — параллельной работе программ. Ключевые слова: параллельная работа программ, параллелизм, вычислительная система, процесс, поток, ресурс, процессор.

Проблемы организации СУБД при параллельной архитектуре...

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

Моделирование операционной системы реального времени...

Рассматривается динамическая модель управляющей части простой операционной системы реального времени. Прототипом модели служит реальная ОС РВ для управления копировально–фрезерным станком. Модель используется в учебном процессе.

Метод генерации процессов функционирования...

Введение. Задача оптимального проектирования человеко-машинных систем является достаточно сложной проблемой. Для ее решения используются различные подходы и соответствующие им программные системы.

Моделирование технических систем в среде Unity 3D

Виртуальное моделирование технических средств с помощью системы Unity 3D. С точки зрения методологии разработки создание виртуальной модели во многом идентично другим способам компьютерного моделирования. Так, например при разработке виртуальной системы...

Краткий обзор достижений в области гетерогенных вычислений

За последние десятилетие гетерогенные вычислительные системы становятся все более привлекательными. По сравнению с традиционными симметричными многопроцессорными ЦПУ...

Применение графических процессоров для параллельных...

Статья описывает актуальность использования параллельных технологий на основе графических процессоров. Рассмотрена задача гравитационного взаимодействия N-тел. Для анализа ускорения использованы различные графические процессоры.

Похожие статьи

Обзор методов организации параллельных вычислений

Соответствующая система классификации основана на рассмотрении числа потоков

На основе числа потоков команд и потоков данных Флинн выделяет четыре класса архитектур

SISD: последовательные ЭВМ. SIMD: ЭВМ с конвейерной, функциональной или матричной...

Отчет о создании стекового микропроцессора на основе ПЛИС...

Введение. Современные САПР цифровых систем (ЦС) предоставляют наряду с возможностью схематического проектирования, разработку ЦС при помощи языков аппаратного проектирования (HDL).

Основы параллельной работы программ | Статья в журнале...

Статья посвящена крайне важному аспекту в работе любой вычислительной системы на сегодняшний день — параллельной работе программ. Ключевые слова: параллельная работа программ, параллелизм, вычислительная система, процесс, поток, ресурс, процессор.

Проблемы организации СУБД при параллельной архитектуре...

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

Моделирование операционной системы реального времени...

Рассматривается динамическая модель управляющей части простой операционной системы реального времени. Прототипом модели служит реальная ОС РВ для управления копировально–фрезерным станком. Модель используется в учебном процессе.

Метод генерации процессов функционирования...

Введение. Задача оптимального проектирования человеко-машинных систем является достаточно сложной проблемой. Для ее решения используются различные подходы и соответствующие им программные системы.

Моделирование технических систем в среде Unity 3D

Виртуальное моделирование технических средств с помощью системы Unity 3D. С точки зрения методологии разработки создание виртуальной модели во многом идентично другим способам компьютерного моделирования. Так, например при разработке виртуальной системы...

Краткий обзор достижений в области гетерогенных вычислений

За последние десятилетие гетерогенные вычислительные системы становятся все более привлекательными. По сравнению с традиционными симметричными многопроцессорными ЦПУ...

Применение графических процессоров для параллельных...

Статья описывает актуальность использования параллельных технологий на основе графических процессоров. Рассмотрена задача гравитационного взаимодействия N-тел. Для анализа ускорения использованы различные графические процессоры.