Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 1216 / 120 | Оценка: 4.73 / 4.45 | Длительность: 18:17:00
ISBN: 978-5-94774-546-7
Специальности: Программист
Лекция 1:

Параллельные технологии решения информационно-логических задач

Лекция 1: 12345 || Лекция 2 >

SPMD-технология обработки списковых структур

Нахождение последнего элемента списка

Одним из наиболее часто используемых способов организации информации в памяти ЭВМ является ее представление в виде списков, которые позволяют оперировать не с самими величинами, а с их адресами, что облегчает программирование, экономит память и сокращает затраты на пересылку информации. С помощью списков удобно отображать данные самой разнообразной структуры: множества, деревья, графы, строки и т.д.

Основными операциями над списками являются: получение доступа к произвольному элементу списка; включение нового элемента в заданное место списка и исключение его оттуда; сортировка элементов списка; поиск элемента с заданными свойствами и другие. Простота их реализации является одним из наиболее привлекательных свойств списковой организации данных. Однако традиционное представление списков на основе ссылок предполагает последовательную обработку их элементов. Все известные алгоритмы, реализующие операции над списками, являются последовательными и ориентированы на однопроцессорные ЭВМ фон-неймановской архитектуры.

Эффективная реализация операций над списками для параллельных вычислительных систем представляет непростую (а для некоторых архитектур — например, векторно-конвейерной — и неразрешимую) задачу. Особый интерес представляла бы разработка таких алгоритмов для ВС с большим числом процессорных элементов.

Под списком L будем понимать совокупность объектов вида In =(V, C), где V — ссылка на данные, C — ссылка на некоторый (следующий) элемент этого же списка. Последний элемент списка имеет своим значением nil, т.е. пустую ссылку.

Пусть элементы каждой двойки (V, C) расположены в памяти так, что их адреса определяются сложением фиксированного смещения с некоторым базовым адресом. Тогда совокупность всех двоек можно рассматривать как массив Rобраз списка, в котором места расположения каждого элемента могут быть рассчитаны.

Интуиция подсказывает, что параллельная обработка списка невозможна, поскольку в общем случае необходимо вычислить адреса k предыдущих элементов списка, прежде чем станет доступен (k+1) -й элемент. Однако, она становится возможной, если использовать образ списка.

Модифицируем представление каждого элемента массива R, введя дополнительное поле D, в которое заносится ссылка на соответствующее поле того элемента списка, ссылка на который содержится в поле C. Строить образ списка целесообразно одновременно с формированием и изменением самого списка. Таким образом, элемент образа списка превращается в тройку (F, C, D). На рис. 1.1 структура элемента образа списка представлена в графической форме.

Элемент образа списка

Рис. 1.1. Элемент образа списка

На рис. 1.2,а изображен список, соответствующий записи L = (A B E F G H Г) (для простоты считаем, что он не содержит подсписков).

Пошаговое нахождение последнего элемента списка (последовательное расположение элементов в памяти)

Рис. 1.2. Пошаговое нахождение последнего элемента списка (последовательное расположение элементов в памяти)

Пусть над всеми его элементами последовательно, начиная с головы, производится следующее действие: поле D текущего элемента принимает значение того поля D, на которое указывает содержащаяся в нем ссылка (если в поле D содержится ссылка на пустой элемент, то его значение не изменяется). В результате список L примет вид, показанный на рис. 1.2,б. Вид списка L после второго прохода показан на рис. 1.2,в. И, наконец, после третьего прохода поле D головы списка будет содержать ссылку на последний элемент списка L, на чем выполнение алгоритма заканчивается (рис. 1.2,г).

Предположим теперь ситуацию, когда элементы списка расположены в памяти в произвольном порядке, например, так, как показано на рис. 1.3,а.

Пошаговое нахождение последнего элемента списка (произвольное расположение элементов в памяти)

Рис. 1.3. Пошаговое нахождение последнего элемента списка (произвольное расположение элементов в памяти)

Важно, что преобразования не изменяют структуру списка, поскольку действия производятся над "избыточной" информацией; при этом на правильность выполнения алгоритма не влияет порядок расположения элементов в памяти.

Заметим теперь, что все операции над образом списка R, производимые во время одного прохода, могут быть выполнены параллельно и независимо друг от друга, то есть, при наличии достаточного вычислительного ресурса, за один временной шаг. Таким образом, мы получаем доступ к последнему элементу списка за log2N шагов. Аналогичные алгоритмы, также использующие информационную избыточность, могут быть построены и для других операций над списками.

Реализация операций над списками для локально-асинхронной ВС, каковой является ВС SPMD-архитектуры, допускает использование принципа монопрограммирования, т.е. составления единственной программы, запускаемой на всех процессорах одновременно. Здесь мы приведем монопрограмму нахождения последнего элемента списка и проследим процесс ее выполнения. Она выбрана потому, что нахождение последнего элемента является частью многих операций над списками. Например, для объединения списков L1 и L2 достаточно найти последний элемент списка L1 и заменить в его поле C пустую ссылку ссылкой на первый элемент списка L2.

Лекция 1: 12345 || Лекция 2 >