Параллельная структура данных - Concurrent data structure - Wikipedia

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

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

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

Основные принципы

Параллельные структуры данных, предназначенные для использования в параллельных или распределенных вычислительных средах, по-разному отличаются от «последовательных» структур данных, предназначенных для использования на однопроцессорной машине.[1] В частности, в последовательной среде один определяет свойства структуры данных и проверяет, что они реализованы правильно, предоставляя свойства безопасности. В параллельной среде спецификация также должна описыватьсвойства живучести свойства безопасности обычно утверждают, что что-то плохое никогда не происходит, а свойства живучести заявляют, что что-то хорошее продолжает происходить. Эти свойства могут быть выражены, например, с помощью Линейная временная логика.

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

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

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

Дизайн и реализация

Параллельные структуры данных значительно труднее спроектировать и проверить как правильные, чем их последовательные аналоги.

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

На современных машинах расположение процессоров и памяти, расположение данных в памяти, коммуникационная нагрузка на различные элементы многопроцессорной архитектуры - все это влияет на производительность. Кроме того, существует противоречие между правильностью и производительностью: алгоритмические усовершенствования, которые часто стремятся повысить производительность затруднить проектирование и проверку правильности реализации структуры данных.[2]

Ключевым показателем производительности является масштабируемость, определяемая ускорение реализации. Ускорение - это показатель того, насколько эффективно приложение использует машину, на которой оно запущено. На машине с P-процессорами ускорение - это отношение времени выполнения структур на одном процессоре к времени их выполнения на T-процессорах. В идеале нам нужно линейное ускорение: мы хотели бы достичь увеличения P при использовании P-процессоров. Структуры данных, скорость которых растет вместе с P, называются масштабируемый. Степень, в которой можно масштабировать производительность параллельной структуры данных, определяется формулой, известной как Закон Амдала и более изощренные версии, такие как Закон Густафсона.

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

Смотрите также

Рекомендации

  1. ^ а б Марк Мойр и Нир Шавит (2007). "Параллельные структуры данных ". В Динеш Мета и Сартадж Сахни (ред.). «Справочник по структурам данных и приложениям» (1-е изд.). Чепмен и Холл / CRC Press. С. 47–14–47–30. Внешняя ссылка в | chapter = (помощь)
  2. ^ Грамоли, В. (2015). Больше, чем вы когда-либо хотели знать о синхронизации: Synchrobench, измеряющий влияние синхронизации на параллельные алгоритмы (PDF). Материалы 20-го симпозиума ACM SIGPLAN по принципам и практике параллельного программирования. ACM. С. 1–10.

дальнейшее чтение

  • Нэнси Линч "Распределенных вычислений"
  • Хагит Аттия и Дженнифер Велч «Распределенные вычисления: основы, моделирование и дополнительные темы, 2-е изд.»
  • Дуг Ли, «Параллельное программирование на Java: принципы и шаблоны проектирования»
  • Морис Херлихи и Нир Шавит, "Искусство многопроцессорного программирования"
  • Маттсон, Сандерс и Массингил "Шаблоны для параллельного программирования"

внешняя ссылка