Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по АВС.DOC
Скачиваний:
37
Добавлен:
01.05.2014
Размер:
81.92 Кб
Скачать

Уровни и формы параллелизма

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

При анализе параллелизма, реализуемого на ЭВМ, выделяют несколько уровней:

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

  2. Алгоритмический (программный) уровень, на котором учитывается параллелизм независимых по командам или по данным частей алгоритма.

  3. Командный уровень, включающий параллелизм, реализуемый при совмещении выполнения отдельных команд или фаз команд.

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

Формы параллелизма

Форма параллелизма обычно достаточно просто характеризует некоторый класс прикладных задач и предъявляет определенные требования к структуре, необходимой для решения этого класса задач параллельной ЭВМ.

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

  1. естественный или векторный параллелизм;

  2. параллелизм независимых ветвей;

  3. параллелизм смежных операций или локальный параллелизм.

Векторный параллелизм.

Наиболее распространенной в обработке структур данных является векторная операция (естественный параллелизм). Вектор – одномерный массив, который образуется из многомерного массива, если один из индексов не фиксирован и пробегает все значения в диапазоне его изменения. В параллельных языках этот индекс обычно обозначается знаком. Пусть, например, А, В, С - двумерные массивы. Тогда можно записать такую векторную операцию: С(*,j) = A(*,j) + B(*,j).

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

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

Параллелизм независимых ветвей. Суть параллелизма независимых ветвей состоит в том, что в программе решения большой задачи могут быть выделены независимые программные части – ветви. Под независимостью ветвей понимается независимость по данным.

В параллельных языках запуск параллельных ветвей осуществляется с помощью оператора FORK M1, M2,…,ML, где M1, M2, …, ML – имена независимых ветвей. Каждая ветвь заканчивается переходом на оператор JOIN(R), выполнение которого вызывает вычитание единицы из ячейки памяти R. Так как в R предварительно записано число, равное количеству ветвей, то при последнем срабатывании оператора JOIN (все ветви выполнены) в R оказывается нуль и управление передается в ячейку, находящуюся за оператором JOIN.

В последовательных языках аналогов оператором FORK и JOIN нет, ветви размещаются в общей программе и выполняются друг за другом.

Параллелизм ветвей имеет ряд приложений: вычислительная математика, системы управления, моделирование, экономика и т.д.

Локальный параллелизм. При исполнении программы регулярно встречаются ситуации, когда исходные данные для i-й операции вырабатываются заранее, например, при выполнении (i-2)-й или (i-3)-й операции. Тогда при соответствующем построении вычислительной системы можно совместить во времени выполнение i-й операции с выполнением (i-1)-й, (i-2)-й, … операции. В таком понимании локальный параллелизм похож на параллелизм независимых ветвей, которые очень отличаются длиной и требуют разных вычислительных систем.

Количественной характеристикой локального параллелизма является число операций r, которое можно выполнить одновременно:

r = ∑(1-d)(l-1)/2

k=1

где d – вероятность того, что результат некоторой операции будет использован в любой следующей за ней операции; l – длина рассматриваемой цепочки команд. Как правило, d=0,1…0.5; l=1,6…4.