Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Описание [ править ]

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

В качестве простого примера, если система выполняет код на двухпроцессорной системе ( процессоры «a» и «b») в параллельной среде, и мы хотим выполнять задачи «A» и «B», можно сказать ЦП «a» для выполнения задачи «A» и ЦП «b» для выполнения задачи «B» одновременно, тем самым сокращая время выполнения выполнения. Задачи можно назначать с помощью условных операторов, как описано ниже.

Параллелизм задач подчеркивает распределенный (распараллеленный) характер обработки (т. Е. Потоки), в отличие от данных ( параллелизм данных ). Большинство реальных программ находятся где-то в континууме между параллелизмом задач и параллелизмом данных. [3]

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

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

Пример [ править ]

Псевдокод ниже иллюстрирует параллелизм задач:

программа:...если CPU = "a", то выполнить задание "А"иначе, если CPU = "b", то выполнить задание "Б"конец, если...конец программы

Цель программы - выполнить некоторую чистую итоговую задачу («A + B»). Если мы напишем код, как указано выше, и запустим его в двухпроцессорной системе, среда выполнения выполнит его следующим образом.

  • В системе SPMD (одна программа, несколько данных) оба процессора будут выполнять код.
  • В параллельной среде оба будут иметь доступ к одним и тем же данным.
  • Предложение «if» различает процессоры. CPU «a» будет читать true в «if», а CPU «b» будет читать true в «else if», таким образом имея свою собственную задачу.
  • Теперь оба процессора одновременно выполняют отдельные блоки кода, одновременно выполняя разные задачи.

Код, выполняемый ЦП «а»:

программа:...выполнить задание "А"...конец программы

Код, выполняемый ЦП «b»:

программа:...выполнить задание "Б"...конец программы

Теперь эту концепцию можно обобщить на любое количество процессоров.

Языковая поддержка [ править ]

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

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

См. Также [ править ]

  • Алгоритмический скелет
  • Параллелизм данных
  • Модель вилки и соединения
  • Модель параллельного программирования

Ссылки [ править ]

  1. ^ Reinders, Джеймс (10 сентября 2007). «Понимание параллелизма задач и данных | ZDNet» . ZDNet . Дата обращения 8 мая 2017 .
  2. ^ Куинн, Майкл Дж. (2007). Параллельное программирование на C с помощью MPI и openMP (ред. Тата МакГроу-Хилл). Нью-Дели: Тата Макгроу-Хилл Паб. ISBN 978-0070582019.
  3. Хикс, Майкл. «Основы параллелизма» (PDF) . Университет Мэриленда: Департамент компьютерных наук . Дата обращения 8 мая 2017 .