Алгоритм обхода тора

Граф вида «тор» представляет собой решетку с дополнительными ребрами, соединяющими вершины из верхнего ряда («строки») решетки с вершинами из нижнего ряда, а также с ребрами, соединяющими вершины из левого ряда («столбца») решетки с вершинами из правого ряда. Таким образом, возникают дополнительные циклы. Каждая вершина тора (в отличие от решетки) имеет степень 4, т.е. граф является регулярным. При стандартном изображении такого графа каждая вершина имеет «левого» соседа, «правого» соседа, «верхнего» соседа, «нижнего» соседа (рис. 26). Тор, построенный на основе решетки m ´ n, содержит mn узлов и 2mn ребер. Количество ребер можно подсчитать как непосредственно, так и на основе известной теоремы теории графов: «сумма степеней узлов равна удвоенному числу ребер».

 

Рис. 26. Тор 3 ´ 5. Ребра различных направлений.

 

Из-за его регулярных свойств тор или его модификации часто используются в различных архитектурах. Например, одна из первых архитектур многопроцессорных ЭВМ ILLIAC-IV использовала тороподобное соединение процессоров.

Требуется обойти все узлы тора m ´ n (но не все ребра). Инициатором – начальным узлом при обходе может быть любой из узлов. Алгоритм ориентирован на топологию тора, но на сайтах нет глобальной информации о топологии, имеются лишь имена ребер (L, R, U, D), определяющие направления в соответствии с приведенным выше рисунком. Их можно считать локальным знанием о топологии.

 

Действия инициатора (выполняется один раз):

out (token, 1) through U

Действия процесса каждого сайта при получении маркера (token, k):

begin ifk = m*n then return(OK)

else if (k mod n = 0)then out (token, k+1) through U

else out (token, k+1) through R