В информатике параллелизм — это способность различных частей или модулей программы , алгоритма или задачи выполняться вне очереди или в частичном порядке , не влияя на результат. Это позволяет параллельно выполнять параллельные модули, что может значительно повысить общую скорость выполнения в многопроцессорных и многоядерных системах. Говоря более техническим языком, параллелизм означает возможность разложения программы, алгоритма или проблемы на независимые от порядка или частично упорядоченные компоненты или единицы вычислений. [1]
Согласно Робу Пайку , параллелизм — это совокупность независимо выполняемых вычислений [2] , а параллелизм — это не параллелизм: параллелизм — это работа с множеством вещей одновременно, а параллелизм — это выполнение множества вещей одновременно. Параллелизм — это структура, параллелизм — это исполнение, параллелизм обеспечивает способ структурировать решение проблемы, которое может (но не обязательно) быть распараллеливаемым. [3]
Для общих параллельных вычислений был разработан ряд математических моделей, включая сети Петри , исчисление процессов , модель параллельной машины с произвольным доступом , модель актера и язык координации Reo .
Как отмечает Лесли Лэмпорт (2015): «Хотя параллельное выполнение программ рассматривалось в течение многих лет, компьютерная наука о параллельности началась с основополагающей статьи Эдсгера Дейкстры 1965 года, в которой была представлена проблема взаимного исключения . ... В последующие десятилетия произошли огромные изменения. рост интереса к параллелизму, особенно к распределенным системам . Оглядываясь назад на истоки этой области, можно отметить фундаментальную роль, которую сыграл Эдсгер Дейкстра». [4]
Поскольку вычисления в параллельной системе могут взаимодействовать друг с другом во время выполнения, количество возможных путей выполнения в системе может быть чрезвычайно большим, а конечный результат может быть неопределенным . Одновременное использование общих ресурсов может стать источником неопределенности, приводящей к таким проблемам, как взаимоблокировки и нехватка ресурсов . [5]
Проектирование параллельных систем часто влечет за собой поиск надежных методов координации их выполнения, обмена данными, распределения памяти и планирования выполнения, чтобы минимизировать время отклика и максимизировать пропускную способность . [6]
Теория параллелизма была активной областью исследований в теоретической информатике . Одним из первых предложений была плодотворная работа Карла Адама Петри о сетях Петри в начале 1960-х годов. За прошедшие годы было разработано множество формализмов для моделирования и рассуждений о параллелизме.
Был разработан ряд формализмов для моделирования и понимания параллельных систем, в том числе: [7]
Некоторые из этих моделей параллелизма в первую очередь предназначены для поддержки рассуждений и спецификаций, тогда как другие могут использоваться на протяжении всего цикла разработки, включая проектирование, реализацию, проверку, тестирование и моделирование параллельных систем. Некоторые из них основаны на передаче сообщений , тогда как другие имеют другие механизмы параллелизма.
Распространение различных моделей параллелизма побудило некоторых исследователей разработать способы унификации этих различных теоретических моделей. Например, Ли и Санджованни-Винсентелли продемонстрировали, что так называемая модель «маркированного сигнала» может использоваться для обеспечения общей основы для определения денотационной семантики множества различных моделей параллелизма [9] , в то время как Нильсен, Сассоне и Винскель продемонстрировали, что теорию категорий можно использовать для обеспечения одинакового единого понимания различных моделей. [10]
Теорема о параллельном представлении в модели актора обеспечивает довольно общий способ представления параллельных систем, которые закрыты в том смысле, что они не получают сообщений извне. (Другие системы параллелизма, например, исчисление процессов, можно смоделировать в модели актера с использованием протокола двухфазной фиксации . [11] ) Математическое обозначение, обозначаемое закрытой системой S , строится со все более лучшими приближениями из начального поведения, называемого ⊥ S, с использованием поведение, аппроксимирующее прогрессию функции S для построения обозначения (значения) для S следующим образом: [12]
Таким образом, S можно математически охарактеризовать с точки зрения всех возможных вариантов поведения.
Различные типы темпоральной логики [13] могут использоваться для рассуждений о параллельных системах. Некоторые из этих логик, такие как линейная временная логика и логика дерева вычислений , позволяют делать утверждения о последовательностях состояний, через которые может пройти параллельная система. Другие, такие как логика вычислительного дерева действий, логика Хеннесси-Милнера и временная логика действий Лэмпорта , строят свои утверждения на основе последовательностей действий (изменений состояния). Основное применение этой логики — написание спецификаций для параллельных систем. [5]
Параллельное программирование включает в себя языки программирования и алгоритмы, используемые для реализации параллельных систем. Параллельное программирование обычно рассматривается [ кем? ] быть более общим, чем параллельное программирование , поскольку оно может включать произвольные и динамические шаблоны связи и взаимодействия, тогда как параллельные системы обычно [ по мнению кого? ] имеют заранее определенную и хорошо структурированную схему общения. Базовые цели параллельного программирования включают корректность , производительность и надежность . Параллельные системы, такие как операционные системы и системы управления базами данных, обычно разрабатываются [ кем? ] работать неопределенно долго, включая автоматическое восстановление после сбоя, и не завершаться неожиданно (см. Управление параллелизмом ). Некоторые [ нужен пример ] параллельные системы реализуют форму прозрачного параллелизма, в которой параллельные вычислительные объекты могут конкурировать за один ресурс и совместно использовать его, но сложности этой конкуренции и совместного использования скрыты от программиста.
Потому что они используют общие ресурсы, параллельные системы в целом [ по мнению кого? ] требуют включения какого-то [ пример необходим ] арбитра где-то в их реализации (часто в базовом оборудовании), чтобы контролировать доступ к этим ресурсам . Использование арбитров создает возможность неопределенности в параллельных вычислениях , что имеет серьезные последствия для практики, включая правильность и производительность. Например, арбитраж вводит неограниченный недетерминизм , который вызывает проблемы с проверкой модели , поскольку он вызывает взрыв в пространстве состояний и может даже привести к тому, что модели будут иметь бесконечное количество состояний.
Некоторые модели параллельного программирования включают сопроцессы и детерминированный параллелизм . В этих моделях потоки управления явно передают свои временные интервалы либо системе, либо другому процессу.
{{cite journal}}
: Требуется цитировать журнал |journal=
( помощь )