Можно выделить несколько видов параллелизма:
1. Естественный параллелизм независимых задач. Он заключается в том, что в систему поступает непрерывный поток не связанных между собой задач, т.е. решение любой задачи не зависит от результатов решения других задач. В этом случае использование нескольких процессоров однозначно повышает производительность.
2. Параллелизм независимых ветвей. Имеет очень широкое реальное распространение. Заключается в том, что при решении большой задачи могут быть выделены отдельные независимые части - ветви программы, которые при наличии нескольких процессоров могут выполняться параллельно и независимо друг от друга.
Двумя независимыми ветвями будем считать части, для которых выполняются следующие условия:
На самом деле задача обнаружения и реализации параллелизма независимых ветвей - очень сложная и объёмная. Фактически - это математическая задача сетевого планирования. С ней вы столкнётесь в курсе "ОПУП" на классическом примере "Утро на даче". Особенная сложность - неизвестность длительности исполнения каждой из множества ветвей. На практике невозможно избежать простоев в работе процессоров, мы лишь минимизируем их.
3. Параллелизм объектов или данных. Имеет место тогда, когда по одной и той же программе обрабатывается некая совокупность данных, поступающая в систему одновременно. Примеры: данные от РЛС - все сигналы обрабатываются по одной и той же программе, задачи векторной алгебры, в которых выполняются одинаковые операции над парами чисел двух аналогичных объектов.
Забегая вперёд можно сказать, что этот вид параллелизма служит базой для построения матричных систем.
Третий путь параллельной обработки - конвейерная обработка информации.
Его реализация возможна даже в системе с одним процессором, разделённым на несколько последовательно включенных операционных блоков, каждый из которых ориентирован на некоторые строго определённые части операции.
Формулу работы конвейерного процессора можно описать так: "Когда i-й операционный блок выполняет i-ю часть j-ой операции, (i-1)-й операционный блок выполняет (i-1)-ю часть (j+1)-ой операции, а (i+1)-й операционный блок выполняет (i+1)-ю часть (j-1)-ой операции"
Работу конвейера можно легко продемонстрировать на примере операции сложения двух чисел с плавающей запятой. Она выполняется за 4-ре шага: