Параллелизм задач (также известен как параллелизм функций и управление параллелизмом ) - это форма распараллеливания компьютерного кода на нескольких процессорах в средах параллельных вычислений. Параллелизм задач направлен на распределение задач - одновременно выполняемых процессами или потоками - между разными процессорами. В отличие от параллелизма данных, который предполагает выполнение одной и той же задачи на разных компонентах данных, параллелизм задач отличается тем, что одновременно выполняется множество разных задач с одними и теми же данными. Распространенным типом параллелизма задач является конвейерная обработка, которая состоит из перемещения одного набора данных через серию отдельных задач, где каждая задача может выполняться независимо от других.
В многопроцессорной системе достигается параллелизм задач когда каждый процессор выполняет другой поток (или процесс) с одними и теми же или разными данными. Потоки могут выполнять один и тот же или другой код. В общем случае разные потоки выполнения взаимодействуют друг с другом во время работы, но это не является обязательным требованием. Обмен данными обычно осуществляется путем передачи данных из одного потока в другой как часть рабочего процесса.
В качестве простого примера, если система выполняет код в двухпроцессорной системе (ЦП " a "" b ") в параллельной среде, и мы хотим выполнять задачи" A "и" B ", можно указать CPU" a "выполнить задачу" A "и CPU" b " «выполнять задачу« B »одновременно, тем самым сокращая время выполнения выполнения. Задачи можно назначать с помощью условных операторов, как описано ниже.
Параллелизм задач подчеркивает распределенный (параллельный) характер обработки (т. Е. Потоки) в отличие от данных (параллелизм данных ). Большинство реальных программ находятся где-то в континууме между параллелизмом задач и параллелизмом данных.
Параллелизм на уровне потоков (TLP ) - это параллелизм, присущий приложению, которое запускает несколько темы сразу. Этот тип параллелизма в основном встречается в приложениях, написанных для коммерческих серверов, таких как базы данных. Благодаря одновременному запуску множества потоков эти приложения могут выдерживать большие объемы операций ввода-вывода и задержки системы памяти, которые могут возникнуть в их рабочих нагрузках - пока один поток задерживается в ожидании доступа к памяти или диску, другие потоки могут выполнять полезную работу.
Использование параллелизма на уровне потоков также начало проникать на рынок настольных компьютеров с появлением многоядерных микропроцессоров. Это произошло из-за того, что по разным причинам становится все более непрактичным увеличивать тактовую частоту или количество инструкций на такт одного ядра. Если эта тенденция сохранится, новые приложения должны будут разрабатываться для использования нескольких потоков, чтобы получить выгоду от увеличения потенциальной вычислительной мощности. Это контрастирует с предыдущими инновациями в области микропроцессоров, в которых существующий код автоматически ускорялся за счет его запуска на более новом / более быстром компьютере.
псевдокод ниже иллюстрирует параллелизм задач:
программа:... если CPU = "a", то выполните задачу "A" else if CPU = "b", тогда выполнить задачу "B" end if... end program
Цель программы - выполнить некоторую чистую итоговую задачу ("A + B"). Если мы напишем код, как указано выше, и запустим его в двухпроцессорной системе, среда выполнения выполнит его следующим образом.
Код, выполняемый ЦП "a":
программа:... выполнить задачу "A"... конечную программу
Код, выполняемый ЦП "b":
программа:... выполнить задачу "B"... завершить программу
Эта концепция теперь может быть обобщена на любое количество процессоров.
Параллелизм задач может поддерживаться в языках общего назначения либо встроенными средствами, либо библиотеками. Примечательные примеры включают:
Примеры детального параллелизма задач языки можно найти в области языков описания оборудования, например Verilog и VHDL.