1.3. Упорядочение данных
В структуру параллельной памяти на рис. 3 включена коммутационная сеть, которая обеспечивает маршрутизацию данных: направление элементов данных, составляющих выбранную структуру, на определенные шины данных памяти. Конкретный вид коммутации, которая должна быть выполнена при обращении к параллельной памяти, обусловлен алгоритмом обработки данных. Если вести анализ коммутационной сети с таких позиций, то можно сказать только, что для обеспечения универсальности она должна осуществлять все возможные переключения шин данных. При ширине доступа, составляющей сотни элементов, реализация и управление такой сетью непростая задача. Однако у этой проблемы есть и еще одна сторона. Рассмотрим ее на примере 2D-параллельной памяти 8 X 8 и таблиц размещения, приведенных на рис. 4, в и 5,6. И в том, и в другом случае обеспечивается параллельная выборка строя двухмерного массива. Если сравнить таблицы, то легко заметить, что первое размещение сохраняет одинаковый порядок элементов во всех строках, а при втором все строки имеют разный порядок элементов. Такое нарушение является, видимо, платой за дополнительную возможность параллельного доступа к столбцам двухмерного массива.
Анализ других размещений, предложенных на рис. 5, и различных геометрических форматов, которые могут быть при этом реализованы, показывает, что во всех случаях параллельно выбираемая совокупность данных имеет различную упорядоченность. Эта упорядоченность подчинена определенному закону и изменяется при переходе от одного размещения к другому, от одного геометрического формата к другому и, наконец, для конкретного формата и таблицы размещения при изменении адреса формата.
Конечно, желательно установить какой-то единый порядок следования элементов, хотя бы для каждого геометрического формата. Чтобы обеспечить независимость порядка элементов в формате от его адреса, необходимо реализовать при каждом обращении к памяти перестановку выбираемых элементов, приводящую их к установленному для данного формата порядку.
Проиллюстрируем это на примере выборки строки в параллельной памяти, основанной на размещении рис. 5,6. Обозначим Аi1 —вектор, образованный элементами строки массива A с номером i1 . При считывании (записи) строки по адресу it порядок элементов в ней определяется соответствующей строкой таблицы размещения. Так, в третьей строке на шине данных нулевого блока размещается элемент aзз, на шине первого блока — а32 и т. д. (рис. 7). Вектор А3 в целом имеет вид
А3' = (a33 a32 a31 a30 a37 a36 a35 a34).
Чтобы привести его к порядку, соответствующему упорядоченности элементов строки в массиве A,
А3 = (a30 a31 a32 a33 a34 a35 a36 a37) ,
необходимо реализовать перестановку элементов, показанную на рис. 7. Для других адресов формата строки необходимы другие перестановки в соответствии с порядком элементов в таблице размещения.
Таким образом, в каждом проекте параллельной памяти, когда определен закон размещения данных в многоблочной запоминающей среде, определяется и структура упорядочивающих преобразований, которые позволяют получать правильный порядок элементов на выходе памяти. Именно в таком «узком» смысле мы будем в дальнейшем рассматривать работу коммутационной сети, имея в виду, что речь идет не о маршрутизации данных в общем смысле (в связи с алгоритмом их обработки), а только о приведении их к исходной упорядоченности.
Рис. 7. Коммутация шин данных, обеспечивающая упорядочение элементов геометрического формата