Научная статья на тему 'Анализ механизмов организации параллельных вычислений'

Анализ механизмов организации параллельных вычислений Текст научной статьи по специальности «Автоматика. Вычислительная техника»

CC BY
200
54
Поделиться
Ключевые слова
ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ / ПРОЦЕСС / ПОТОК / МЬЮТЕКС / СЕМАФОР / АКТОР / КОНВЕЙЕР

Аннотация научной статьи по автоматике и вычислительной технике, автор научной работы — Снегирев Юрий Владимирович, Тутарова Власта Диляуровна

Рассматриваются средства организации параллельных вычислений на ЭВМ. Приводятся отличия параллельной и конвейерной обработки данных. Содержится подробное описание способов обмена данными между параллельно выполняющимися задачами. Выделяется три основных способа межзадачного обмена данными: на основе разделяемой памяти, передача сообщений, механизма обещаний. Механизм разделяемой памяти крайне прост в реализации, обладает высоким быстродействием, но не лишен определенных проблем: состояний гонок и взаимоблокировок. Приводятся описания способов синхронизации параллельно выполняющихся задач: мьютексов, семафоров и различных видов мониторов. Следует заметить, что межзадачный обмен данными в большинстве промышленно применяемых средах программирования реализован именно этим способом. Описаны различные реализации межзадачного обмена данными на основе передачи сообщений. Как утверждают ранние исследователи данного механизма, он, скорее, базируется на физике, нежели на математической логике, теории множеств, алгебре и иных математических дисциплинах Передача данных может осуществляться синхронно и асинхронно. Особое внимание уделено модели акторов как наиболее перспективному и глубоко теоретически и практически проработанному способу. Также приведено описание и других примеров организации межзадачного обмена на основе передачи сообщений: аморфные вычисления, программирование потоками данных и SОАР. Описаны два типа межзадачного обмена данными на основе механизма обещаний: явный и неявный. Для всех описываемых средств организации параллельных вычислений приведены примеры программных реализаций. Например, в pthreads – реализации многопоточной обработки для POSIX-совместимых операционных систем – используется разделяемая память, а в языке Еrlаng – модель акторов. Реализации механизма обещаний существуют для языков Jаvа, LISР и Наsкеll. Делается вывод о том, что способ, которым организуются параллельные вычисления, следует выбирать исходя из следующих критериев: решаемой задачи, используемой среды программирования, возможности или невозможности совмещения сразу нескольких способов.

ANALYSIS OF PARALLEL COMPUTING ORGANIZATION MECHANISMS

The article considers the means of parallel computing organization on a computer. It distinguishes parallel and pipeline data processing and describes in details the mechanisms of data exchange between concurrent run tasks. The authors point out three main methods of intertask data exchange: on the basis of shared memory; message passing; promise mechanisms. The mechanism of shared memory is very simple in realization, has a high speed of operation, however, features certain problems: reace condition and deadlocks. The study describes the methods of concurrent run tasks syncronisation: mutexes, semaphores and various monitors. It should be noted that the intertask exchange of data in most of industrially implemented programming field is realized by this method. The article describes various realizations of intertask data exchange on the basis of message passing. According to opinion of the first researchers of this mechanism, it rather based on physics, than on mathematical logic, set theory, algebra and other mathematical disciplines. Data exchange may be carried out synchronously and asynchronously. Specific attention is paid to actor model as to the most promising and deeply theoretically and practically worked through method. The article also describes other examples of intertask exchange organization on the basis of message passing: amorphous computing, data flow programming and SOAP. The article describes two types of intertask data exchange on the basis of promise mechanism: explicit and implicit. For all the described means of parallel computing organization the authors adduce the examples of program realization. For example, in pthreads – realization of multithreading for POSIX-compatible operational systems – shared memory is commonly used, and in Erlang language – actor model. As for promise mechanism there are realizations for Java, LISP and Haskell. The researchers conclude that the method of parallel computing organization should be selected by the following criteria: the problem to be solved; the used programming environment; possibility or impossibility of combining several methods at once.

Текст научной работы на тему «Анализ механизмов организации параллельных вычислений»

УДК 004.424

Ю. В. Снегирев, В. Д. Тутарова

АНАЛИЗ МЕХАНИЗМОВ ОРГАНИЗАЦИИ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ

Аннотация. Рассматриваются средства организации параллельных вычислений на ЭВМ. Приводятся отличия параллельной и конвейерной обработки данных. Содержится подробное описание способов обмена данными между параллельно выполняющимися задачами. Выделяется три основных способа межзадачного обмена данными: на основе разделяемой памяти, передача сообщений, механизма обещаний. Механизм разделяемой памяти крайне прост в реализации, обладает высоким быстродействием, но не лишен определенных проблем: состояний гонок и взаимоблокировок. Приводятся описания способов синхронизации параллельно выполняющихся задач: мьютексов, семафоров и различных видов мониторов. Следует заметить, что межзадачный обмен данными в большинстве промышленно применяемых средах программирования реализован именно этим способом. Описаны различные реализации межзадачного обмена данными на основе передачи сообщений. Как утверждают ранние исследователи данного механизма, он, скорее, базируется на физике, нежели на математической логике, теории множеств, алгебре и иных математических дисциплинах Передача данных может осуществляться синхронно и асинхронно. Особое внимание уделено модели акторов как наиболее перспективному и глубоко теоретически и практически проработанному способу. Также приведено описание и других примеров организации межзадачного обмена на основе передачи сообщений: аморфные вычисления, программирование потоками данных и SOAP. Описаны два типа межзадачного обмена данными на основе механизма обещаний: явный и неявный. Для всех описываемых средств организации параллельных вычислений приведены примеры программных реализаций. Например, в pthreads - реализации многопоточной обработки для POSIX-совместимых операционных систем - используется разделяемая память, а в языке Erlang - модель акторов. Реализации механизма обещаний существуют для языков Java, LISP и Haskell. Делается вывод о том, что способ, которым организуются параллельные вычисления, следует выбирать исходя из следующих критериев: решаемой задачи, используемой среды программирования, возможности или невозможности совмещения сразу нескольких способов.

Ключевые слова: параллельные вычисления, процесс, поток, мьютекс, семафор, актор, конвейер.

Yu. V. Snegirev, V. D. Tutarova

ANALYSIS OF PARALLEL COMPUTING ORGANIZATION MECHANISMS

Abstract. The article considers the means of parallel computing organization on a computer. It distinguishes parallel and pipeline data processing and describes in details the mechanisms of data exchange between concurrent run tasks. The authors point out three main methods of intertask data exchange: on the basis of shared memory; message passing; promise mechanisms. The mechanism of shared memory is very simple in realization, has a high speed of operation, however, features certain problems: reace condition and deadlocks. The study describes the methods of con-

current run tasks syncronisation: mutexes, semaphores and various monitors. It should be noted that the intertask exchange of data in most of industrially implemented programming field is realized by this method. The article describes various realizations of intertask data exchange on the basis of message passing. According to opinion of the first researchers of this mechanism, it rather based on physics, than on mathematical logic, set theory, algebra and other mathematical disciplines. Data exchange may be carried out synchronously and asynchronously. Specific attention is paid to actor model as to the most promising and deeply theoretically and practically worked through method. The article also describes other examples of intertask exchange organization on the basis of message passing: amorphous computing, data flow programming and SOAP. The article describes two types of intertask data exchange on the basis of promise mechanism: explicit and implicit. For all the described means of parallel computing organization the authors adduce the examples of program realization. For example, in pthreads - realization of multithreading for POSIX-compatible operational systems - shared memory is commonly used, and in Erlang language - actor model. As for promise mechanism there are realizations for Java, LISP and Haskell. The researchers conclude that the method of parallel computing organization should be selected by the following criteria: the problem to be solved; the used programming environment; possibility or impossibility of combining several methods at once.

Key words: concurrent computing, process, thread, mutex, semaphore, actor, pipeline.

Введение

На современной ЭВМ многие приложения используют параллельные вычисления, применение которых при создании и/или использовании программных продуктов открывает ряд преимуществ:

- параллельное выполнение участков кода увеличивает производительность приложений в целом;

- улучшение «отзывчивости» ввода/вывода;

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

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

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

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

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

1. Основные понятия и разновидности способов параллельной обработки данных

Несмотря на многообразие форм проявления параллелизма в архитектуре компьютеров, существует лишь два способа параллельной обработки данных: собственно параллельная и конвейерная обработка данных [1].

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

Конвейерная обработка данных [1]. Все операции над вещественными числами в компьютере разделяются на последовательности микроопераций. Допустим, какая-то операция (назовем ее для определенности O) включает пять таких микроопераций (назовем их О1...О5). По условиям задачи требуется выполнить О над двумя векторами из ста чисел. Если организовать вычисление О таким образом, что после выполнения О1 над первой парой чисел из векторов результат О1 будет передан на вход О2, а О1, в свою очередь, начнет выполняться над следующей парой чисел и т.д., то такой способ обработки данных называется конвейерным.

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

2. Реализация явного обмена данными между параллельными задачами на основе механизма разделяемой памяти

Данный способ межзадачного обмена данными появился исторически раньше всех остальных и вплоть до текущего момента является наиболее популярным. Для упрощения дальнейшего изложения материала будем считать понятия задачи и процесса тождественными. В контексте операционных систем это может быть не всегда верно, так как задачи в операционных системах могут быть представлены в форме процессов, потоков (threads) или волокон (fibres).

Реализация обмена данными параллельных задач на основе разделяемой памяти была впервые предложена Эдсгером Дейкстра, Пером Бринч Хансеном и Чарльзом Энтони Ричард Хоаром.

Хансен в [2] четко приводит классификацию концепций, которые легли в основу параллельных вычислений с обменом данными на основе разделяемой памяти (рис. 1).

Дейкстра в [3] выдвинул концепции абстрактных параллельных вычислений: «Мы оговорили, что процессы должны соединяться достаточно свободно (неплотно); под этим мы подразумеваем, что кроме (редких) моментов принудительного обмена данными отдельные процессы следует считать независимыми друг от друга.

Рис. 1. Классификация концепций Хансена

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

Следует отметить особую важность этого понятия. Представим, что в ходе вычислений между несколькими процессами разделяется некоторая переменная. Один процесс, считав ее значение, производит на основе его некоторые вычисления. При отсутствии критической секции другой процесс может изменить это значение во время работы первого, вызвав тем самым искажение данных. Классическим примером, иллюстрирующим данную проблему, является пример с операциями над банковским счетом. Допустим, все операции происходят без блокировки. Таким образом, в системе зачисление и списание средств со счета может происходить одновременно. Данная проблема получила название «состояние гонки».

В качестве реализации механизма критических секций Дейкстра предложил концепцию семафоров. Это такие сущности вычислительной системы с параллельными процессами, в которых имеется некоторый счетчик задач, вошедших в критическую секцию. Как только этот счетчик достигает нуля, новые задачи, пытающиеся войти в критическую секцию, «засыпают».

В работе [4] Дейкстра подробно объясняет теорию «слоеной» архитектуры многозадачных систем, доказывает корректность критических секций и реализации ограниченного буфера через семафоры. Здесь же он ставит и решает задачу планирования, которую он назвал задачей об обедающих философах, иллюстрирующую опасности взаимоблокировок и неправильного планирования исполнения. Впоследствии эта задача стала классической в курсе теории вычислительных процессов.

Хансен разработал расширенную версию языка программирования Паскаль (названную Concurrent Pascal) [5], в которой ввел концепции параллельных процессов и мониторов. Независимо от него концепцию мониторов также разработал Хоар.

Монитор представляет собой расширенный вариант критической секции. Необходимость в мониторах появляется в ситуации, когда простого взаимного исключения недостаточно. Очень часто задачам требуется ожидать наступления некоторого события перед тем, как они могут предпринять некоторое действие. В такой ситуации не всегда возможно обойтись «занятым ожиданием» (busy wait), так как задача, ожидающая наступления события, находится в критической секции, а значит, никакая другая задача не может исполнять этот же код, что может быть крайне нежелательно. Сложившуюся проблему можно разрешить, используя механизм, называемый «переменная типа условие» (condition variable). Концептуально механизм представляет собой очередь задач, связанных с монитором, в которой задачи могут ждать, пока некоторое условие не станет истинным.

Хоар и Хансен предложили применять блокирующиеся условные переменные. Мониторы, использующие блокирующиеся условные переменные, часто называют мониторами Хоара. Бур и Ховард предложили применять не-блокирующиеся условные переменные. Такие мониторы стали называть мониторами с семантикой Mesa [6].

Создатели языка программирования Java реализовали еще один вид мониторов, который можно назвать мониторами с неявной условной переменной [7].

Поясним механизмы работы каждого из этих видов мониторов. Введем некоторые обозначения. Обозначим через P условие, при истинности которого задача продолжает выполняться. С ним связана условная переменная c. Таким образом, Pc - утверждение истинности условия P через переменную c.

Условные переменные поддерживают две основные операции:

- ожидание (wait, в нашем случае - wait c) - операция, инициируемая задачей, которой требуется проверка Pc. Пока задача ожидает наступления Pc, она не занимает монитор;

- уведомление (signal, в нашем случае - signal c) - операция, инициируемая задачей, чтобы уведомить других об истинности Pc.

Поясним работу монитора Хоара. Пусть e - очередь задач, вошедших в монитор; s - очередь задач, которые выполнили операцию уведомления. Для каждой условной переменной c c.q - очередь задач, ожидающих на этой условной переменной (т.е. ожидающих истинности Pc).

Поясним работу монитора с семантикой Mesa. Так как здесь используется неблокирующаяся условная переменная, операция уведомления не приводит к тому, что задача, из которой она была запущена, теряет блокировку монитора. Вместо этого такая задача перемещается в очередь s. Соответственно отпадает необходимость в очереди s. Отметим, что англоязычное название операции уведомления в этом случае заменяется на notify. Также появляется операция notify all (уведомить всех). Операции над монитором Хоара и Mesa-монитором представлены в табл. 1.

Наконец, поясним поведение мониторов в Java (заметим, что такой же подход применяется и в языке C#). Здесь опускается операция уведомления. Когда какая-либо задача покидает монитор (завершаясь или ожидая освобождения), условия продолжения выполнения всех остальных задач вычисляются заново, пока не будет найдено истинное. В таких системах отпадает потребность в использовании явной условной переменной, однако условия продолжения выполнения должны быть явно закодированы.

Таблица 1

Псевдокод операций над мониторами

Операция Монитор Хоара Ме5я-монитор

Вход в монитор войти в метод; если монитор заблокирован: добавить текущую задачу в є; заблокировать текущую задачу; иначе: заблокировать монитор войти в метод; если монитор заблокирован: добавить текущую задачу в е; заблокировать текущую задачу; иначе: заблокировать монитор;

Выход из монитора планирование; выйти из метода планирование; выйти из метода

Ожидание на c добавить текущую задачу в c.q; планирование; заблокировать текущую задачу добавить текущую задачу в с^; планирование; заблокировать текущую задачу

Уведомление задачи, ожидающей на c если c.q не пуста: выбрать и извлечь из c.q одну задачу t (такая задача называется уведомленной); добавить t в очередь 5; запустить t заново; (таким образом, t следующей заблокирует монитор) заблокировать текущую задачу если с^ не пуста: выбрать и удалить задачу t из с^; поместить t в е

Уведомление всех задач, ожидающих на c отсутствует переместить все задачи из с^ в е

Планирова- ние если 5 не пуста: выбрать и извлечь из 5 одну задачу, запустить ее заново (эта задача следующей заблокирует монитор); иначе, если е не пуста: выбрать и извлечь из е одну задачу, запустить ее заново (эта задача следующей заблокирует монитор); иначе: разблокировать монитор если е не пуста: выбрать и удалить одну задачу из е и запустить ее заново; иначе: разблокировать монитор;

3. Реализация явного обмена данными между параллельными задачами на основе механизма передачи сообщений

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

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

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

Синхронная передача сообщений обладает следующими преимуществами:

- простота системы, так как создается точка синхронизации между получателем и отправителем;

- отсутствует потребность в буферизации.

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

Наиболее распространенными реализациями систем межзадачного обмена данными на основе обмена сообщениями являются:

- модель акторов;

- аморфные вычисления;

- программирование потоком данных;

- SOAP.

Модель акторов. Впервые модель акторов упоминается в [8]. Согласно Хьюту, в отличие от всех остальных моделей вычислений, модель акторов базируется на физике, а не на математической логике, теории множеств, алгебре и прочих математических дисциплинах. Ученый утверждает, что из всех разделов физики наибольшее влияние на модель оказали квантовая физика и теория относительности.

Затем Ирен Гриф разработала операционную семантику модели акторов как часть своей диссертации. Далее Хьюит совместно с другими авторами опубликовала несколько аксиоматических законов модели акторов.

В основе модели акторов лежит утверждение о том, что все элементы системы являются акторами. Это утверждение во многом сходно со стратегией объектно-ориентированного подхода («все элементы системы - объекты»), но различается в том, что объектно-ориентированное программное обеспечение очень часто не предполагает параллелизма, тогда как в модель акторов он заложен изначально.

Актор - сущность в вычислительной системе, которая в ответ на получение сообщения может:

- отправить конечное число сообщений другим акторам;

- создать конечное число новых акторов;

- определить свое поведение при получении следующего сообщения.

Ослабление связи отправителя с сообщением стало фундаментальным

преимуществом модели акторов, позволяя осуществлять асинхронную передачу сообщений.

Получатели сообщений идентифицируются при помощи некоторого адреса, иногда называемого «почтовым адресом». Таким образом, актор мо-

жет общаться только с теми акторами, адреса которых ему известны. Определить адреса отправителей он может из полученных сообщений; адреса порождаемых им самим акторов ему известны.

В целом модель акторов характеризуется:

- изначальной ориентированностью на многозадачность;

- динамическим созданием акторов;

- включением адресов акторов в сообщения;

- общением между акторами при помощи асинхронной передачи сообщений, порядок получения которых не определен.

Аморфные вычисления. Этот термин [9] применим к системам, в состав которых входит большое число одинаковых, параллельных процессов, у каждого из которых ограничена вычислительная мощность и возможности взаимодействия с окружающими.

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

Аморфные вычисления обладают следующими свойствами:

- они реализуются на большом количестве потенциально нестабильных устройствах с высокой степенью параллелизации;

- у этих устройств ограниченная память и вычислительный потенциал;

- устройства работают асинхронно;

- они не имеют априорной информации о своем положении;

- общение между ними локализовано;

- они проявляют недетерминированное или самоорганизующееся поведение (состояний устройств значительно больше, чем самих устройств);

- они отказоустойчивы, особенно в связи с неправильно работающим устройством или неверной последовательностью смены состояний.

В силу новизны подхода упоминание о реальных прототипах вычислительных систем, построенных на основе этой модели, нам найти не удалось.

Программирование потоками данных - это парадигма программирования, в рамках которой программа определяется как сеть процессов «черных ящиков», обменивающихся сообщениями по заранее определенным соединениям, задаваемым процессам извне. Эти процессы могут соединяться бесконечным числом способов для создания новых программ без изменения внутреннего поведения самих процессов. Таким образом, программирование потоками данных является изначально компонентно-ориентированным.

Эту парадигму впервые предложил Моррисон. Подробно она описана в [10]. Моррисон предполагал, что упомянутые выше процессы будут выполняться параллельно и время их жизни совпадает со временем жизни системы.

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

SOAP (простой протокол обмена сообщениями - Simple Object Access Protocol) - это спецификация протокола обмена структурированной информацией между веб-сервисами в компьютерных сетях. Он использует XML в качестве формата сообщений и протоколы HTTP и SMTP для их передачи. SOAP был разработан в 1998 г. в Microsoft, но затем стал общедоступным стандартом.

Для данной работы SOAP представляет интерес лишь в той мере, что сервисы, поддерживающие SOAP, могут быть реализованы на любых языках программирования, у которых есть возможность генерации XML-документов и передачи для транспортировки посредством HTTP или SMTP. То есть SOAP значительно лучше унифицирован, чем другие методы межзадачного обмена данными посредством передачи сообщений.

4. Реализация межзадачного обмена данными на основе механизма обещаний

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

Обещания также носят название сделок (futures) и задержек (delays). Они выступают в качестве временного хранилища изначально неизвестного результата в силу того, что он еще не вычислен. Этот механизм был предложен коллективом авторов [11].

Различают явные и неявные обещания. При использовании неявных обещаний этот временный объект просто получает свое значение так, как если бы он был обыкновенной ссылкой. Для получения значения явного обещания требуется вызвать функцию, возвращающую это значение. Явные обещания могут быть реализованы посредством библиотеки, тогда как неявные должны быть встроены в язык. В силу особенностей реализации механизм обещаний в данный момент обладает сравнительно невысоким быстродействием.

Заключение

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

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

Параллельные вычисления на основе механизма обещаний на данный момент обладают сравнительно низким быстродействием и в целом недоста-

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

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

В таких языках, как C, C++, многозадачность на основе разделяемой памяти реализуется посредством внешних библиотек (например, pthreads, OpenMP). В Java механизмы синхронизации встроены в объекты, но механизмы многозадачности (потоки) содержатся в стандартной библиотеке. То же относится и к языку C# и платформе .Net.

Одним из наиболее успешных языков, реализующих модель акторов, является Erlang.

Механизмы обещаний реализованы в качестве внешних библиотек для таких языков, как LISP, Haskell, Java и C++ (планируется включить реализацию механизма обещаний в стандартную библиотеку).

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

Список литературы

1. Воеводин, В. В. Параллельные вычисления / В. В. Воеводин, Вл. В. Воеводин. -СПб. : БХВ-Петербург, 2002. - 608 с.

2. Per Brinch Hansen. The Invention of Concurrent Programming / Per Brinch Hansen. - New York : Springen Verlag, 2001.

3. Dijkstra, E. W. Cooperating sequential processes Technological University / E. W. Dijkstra. - Eindhoven, The Netherlands, 1965.

4. Dijksta, E. W. Hierarchical Ordering of Sequential Processes / E. W. Dijksta. -Eindhoven. - The NetherlandsTechnological University, 1971.

5. Per Brinch Hansen. The Architecture of Concurrent Programs / Per Brinch Hansen. - New Jersey, Prentice Hall, 1997.

6. Buhr, P. A. Monitor classification / P. A. Buhr, M. Frontier // Dept. of Computer Science, University of Waterloo. - Waterloo, Ontario, Canada, 1995.

7. Horstmann, C. S. Core Java Volume I. Fundamentals / C. S. Horstmann, G. Cornell. - New Jersey, Prentice Hall, 2007.

8. Hewitt, C. A Universal Modular Actor Formalism for Artificial Intelligence / Carl Hewitt, Peter Bishop, Richard Steiger. - IJCAI, 1973.

9. Communications of the ACM / Harold Abelson, Thomas F. Knight, Gerald Jay Suss-man, and friends Amorphous Computing. May 2000. - URL: http://www.swiss.ai. mit.edu/projects/amorphous/cacm-2000.html.

10. Morrison, J. Paul. Flow-Based Programming / J. Paul Morrison // A New Approach to Application Development. - 2nd Edition. - New Jersey, CreateSpace, 2010.

11. Friedman, D. The Impact of Applicative Programming on Multiprocessing / Daniel Friedman, David Wise. - International Conference on Parallel Processing, 1976. -P. 263-272.

References

1. Voevodin V. V., Voevodin Vl. V. Parallel’nye vychisleniya [Parallel computing]. Saint Petersburg: BKhV-Peterburg, 2002, 608 p.

2. Per Brinch Hansen. The Invention of Concurrent Programming. New York: Springen Verlag, 2001.

3. Dijkstra E. W. Cooperating sequential processes Technological University. Eindhoven, The Netherlands, 1965.

4. Dijksta E. W. Hierarchical Ordering of Sequential Processes. Eindhoven. The Nether-lands.Technological University, 1971.

5. Per Brinch Hansen. The Architecture of Concurrent Programs. New Jersey, Prentice Hall, 1997.

6. Buhr P. A. Frontier M. Dept. of Computer Science, University of Waterloo. Waterloo, Ontario, Canada, 1995.

7. Horstmann C. S., Cornell G. Core Java Volume I. Fundamentals. New Jersey, Prentice Hall, 2007.

8. Hewitt C. Bishop Peter, Steiger Richard A Universal Modular Actor Formalism for Artificial Intelligence. IJCAI, 1973.

9. Harold Abelson, Thomas F. Knight, Gerald Jay Sussman, and friends Amorphous Computing. Communications of the ACM, May 2000. available at: http://www.swiss. ai.mit.edu/projects/amorphous/cacm-2000.html.

10. Morrison J. Paul A New Approach to Application Development. 2nd edition. New Jersey, CreateSpace, 2010.

11. Friedman D., Wise D. International Conference on Parallel Processing, 1976, pp. 263272.

Снегирев Юрий Владимирович аспирант, Магнитогорский государственный технический университет (г. Магнитогорск, пр. Ленина, 38)

E-mail: y.v.snegirev@gmail.ru

Snegirev Yuriy Vladimirovich

Postgraduate student, Magnitogorsk State Technical University (Magnitogorsk, 38 Lenin Avenue)

Тутарова Власта Диляуровна кандидат технических наук, доцент, кафедра вычислительной техники и прикладной математики, Магнитогорский государственный технический университет (г. Магнитогорск, пр. Ленина, 38)

Tutarova Vlasta Dilyaurovna Candidate of engineering sciences, associate professor, sub-department of computer science and applied mathematics, Magnitogorsk State Technical University (Magnitogorsk, 38 Lenin Avenue)

E-mail: y.v.snegirev@gmail.ru

УДК 004.424 Снегирев, Ю. В.

Анализ механизмов организации параллельных вычислений /

Ю. В. Снегирев, В. Д. Тутарова // Известия высших учебных заведений. Поволжский регион. Технические науки. - 2013. - № 2 (26). - С. 34-44.