Параллелизм задач - Task parallelism
Эта статья включает в себя список общих Рекомендации, но он остается в основном непроверенным, потому что ему не хватает соответствующих встроенные цитаты.Май 2011 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Параллелизм задач (также известный как параллелизм функций и управлять параллелизмом) является формой распараллеливание из компьютерный код через несколько процессоры в параллельные вычисления среды. Параллелизм задач фокусируется на распределении задачи - одновременно исполняет процессы или же потоки - на разных процессорах. В отличие от параллелизм данных который предполагает выполнение одной и той же задачи для разных компонентов данных, параллелизм задач отличается тем, что одновременно выполняется множество разных задач с одними и теми же данными.[1] Распространенным типом параллелизма задач является конвейерная обработка который состоит из перемещения одного набора данных через серию отдельных задач, где каждая задача может выполняться независимо от других.
Описание
В многопроцессорной системе параллелизм задач достигается, когда каждый процессор выполняет другой поток (или процесс) с одними и теми же или разными данными. Потоки могут выполнять один и тот же или другой код. В общем случае разные потоки выполнения взаимодействуют друг с другом во время работы, но это не является обязательным требованием. Связь обычно происходит путем передачи данных из одного потока в другой как часть рабочий процесс.[2]
В качестве простого примера, если система выполняет код на двухпроцессорной системе (Процессоры "а" и "б") в а параллельно среды, и мы хотим выполнять задачи «A» и «B», можно указать CPU «a» выполнять задачу «A» и CPU «b» выполнять задачу «B» одновременно, тем самым уменьшая время выполнения исполнения. Задачи можно назначать с помощью условные утверждения как описано ниже.
Параллелизм задач подчеркивает распределенный (распараллеленный) характер обработки (т. Е. Потоки) в отличие от данных (параллелизм данных ). Большинство реальных программ находятся где-то в континууме между параллелизмом задач и параллелизмом данных.[3]
Параллелизм на уровне потоков (TLP) это параллелизм присущ приложению, которое запускает несколько потоки однажды. Этот тип параллелизма в основном встречается в приложениях, написанных для коммерческих серверы такие как базы данных. Благодаря одновременному запуску множества потоков эти приложения могут выдерживать большие объемы операций ввода-вывода и задержки системы памяти, которые могут возникнуть в их рабочих нагрузках - пока один поток задерживается в ожидании доступа к памяти или диску, другие потоки могут выполнять полезную работу.
Использование параллелизма на уровне потоков также начало проникать на рынок настольных ПК с появлением многоядерный микропроцессоры. Это произошло потому, что по разным причинам становится все более непрактичным увеличивать тактовую частоту или количество инструкций на такт одного ядра. Если эта тенденция сохранится, новые приложения должны будут разрабатываться для использования нескольких потоков, чтобы получить выгоду от увеличения потенциальной вычислительной мощности. Это контрастирует с предыдущими инновациями в области микропроцессоров, в которых существующий код автоматически ускорялся за счет его запуска на более новом / более быстром компьютере.
Пример
В псевдокод ниже показан параллелизм задач:
программа: ... если CPU = "a", то выполнить задачу "A", иначе, если CPU = "b", то выполнить задачу "B" end if ... end program
Цель программы - выполнить некоторую чистую итоговую задачу («A + B»). Если мы напишем код, как указано выше, и запустим его в двухпроцессорной системе, среда выполнения выполнит его следующим образом.
- В СПМД (одна программа, несколько данных) система, обе Процессоры выполнит код.
- В параллельной среде оба будут иметь доступ к одним и тем же данным.
- Предложение «if» различает процессоры. CPU «a» будет читать true в «if», а CPU «b» будет читать true в «else if», таким образом имея свою собственную задачу.
- Теперь оба процессора одновременно выполняют отдельные блоки кода, одновременно выполняя разные задачи.
Код, выполняемый ЦП «а»:
программа: ... выполнить задание "А" ... завершить программу
Код, выполняемый ЦП «b»:
программа: ... выполнить задание "B" ... завершить программу
Теперь эту концепцию можно обобщить на любое количество процессоров.
Языковая поддержка
Параллелизм задач может поддерживаться в языках общего назначения либо встроенными средствами, либо библиотеками. Известные примеры включают:
- Ada: Задачи (встроенные)
- C ++ (Intel): Заправка строительных блоков
- C ++ (Intel): Силк Плюс
- C ++ (открытый исходный код / Apache 2.0): RaftLib
- C, C ++, Objective-C (Apple): Grand Central Dispatch
- D: задачи и волокна
- Идти: горутины
- Ява: Параллелизм Java
- .СЕТЬ: Библиотека параллельных задач
- Delphi (System.Threading.TParallel)
Примеры мелкозернистых языков с параллельными задачами можно найти в области Языки описания оборудования подобно Verilog и VHDL.
Смотрите также
- Алгоритмический скелет
- Параллелизм данных
- Модель вилки-соединения
- Модель параллельного программирования
Рекомендации
- ^ Рейндерс, Джеймс (10 сентября 2007 г.). "Понимание параллелизма задач и данных | ZDNet". ZDNet. Получено 8 мая 2017.
- ^ Куинн, Майкл Дж. (2007). Параллельное программирование на C с MPI и openMP (Ред. Таты МакГроу-Хилл). Нью-Дели: Тата Макгроу-Хилл Паб. ISBN 978-0070582019.
- ^ Хикс, Майкл. «Основы параллелизма» (PDF). Университет Мэриленда: Департамент компьютерных наук. Получено 8 мая 2017.