Модель PRAMМодель PRAM: Parallel Random-Access MemoryПозволяет учитывать ограничения, связанные с одновременным доступом к памятиЯвляется идеализированной моделью архитектуры SMP (Symmetric MultiProcessor, Shared Memory Processor)
Слайд 8
ЗАДАЧА НАХОЖДЕНИЯ КОРНЕЙ ДВОИЧНОГО ЛЕСА Пример CREW-алгоритма
Слайд 9
Пример CREW-алгоритма Дано: Лес, состоящий из бинарных деревьев. Деревья
заданы следующим образом: для каждой вершины имеется указатель на
её родителя. Для корней деревьев этот указатель пуст. Требуется: для каждой вершины найти корень дерева, которому она принадлежит
Слайд 10
Пример CREW-алгоритма Представление входных данных: вершины пронумерованы, ребра деревьев заданы
с помощью массива parent: элемент parent[i] представляет номер вершины,
являющейся родителем для вершины с номером i.
Слайд 11
Пример CREW-алгоритма Результат работы алгоритма — массив root. В
ячейке root[i] хранится вершины, являющейся корнем дерева, в которое
входит вершина i.
Массивы parent и root хранятся в общей памяти.
Слайд 12
CREW-алгоритм Для каждого процессора Pi выполнить Если
parent[i] = NIL, то root[i] := i; Пока существует узел
i, для которого parent[i] ≠ NIL, выполнять: Для каждого процессора i выполнить Если parent[i] ≠ NIL, то { root[i] := root[parent[i]]; parent[i] := parent[parent[i]]; }
Слайд 13
Анализ CREW-алгоритма Временная сложность алгоритма: O(log2 d), где d
— наибольшая глубина дерева в заданном лесе.
Можно показать, что
ни один EREW-алгоритм не может решить эту задачу за время, меньшее O(log2 n), где n — количество вершин в лесе
Слайд 14
НАХОЖДЕНИЕ МАКСИМАЛЬНОГО ЭЛЕМЕНТА В МАССИВЕ Пример CRCW-алгоритма
Слайд 15
Пример CRCW-алгоритма Дано: Массив n элементов
Количество процессоров: n2. Каждый процессор нумеруется
парой индексов. Процессор с номером (i,j) сравнивает A[i] и A[j].
Используется вспомогательный булевский массив m[i]. После выполнения сравнений m[i]=true ⇔ A[i] — наибольший элемент массива. Результат помещается в переменную max.
Слайд 17
CRCW-алгоритм Для всех i от 0 до n–1 выполнить:
m[i] := true; Для всех i от 0 до n–1
и для всех j от 0 до n–1 выполнить: Если A[i] < A[j], то m[i] := false; Для всех i от 0 до n–1 выполнить: Если m[i] = true, то max := A[i]; Вернуть max.
Слайд 18
Анализ CRCW-алгоритма Без использования параллельного чтения невозможно решить эту
же задачу быстрее, чем за время O(log n). Представленный
CRCW-алгоритм работает за время O(1) и требует n2 процессоров. Наилучший последовательный алгоритм работает за время O(n). Поэтому эффективность составляет 1/n, т.е. алгоритм не является эффективным по затратам.