Как уже отмечалось ранее, при заданном алгоритме и входных данных граф алгоритма определяется однозначно и представляет информационное ядро алгоритма. Такая его интерпретация связана с тем, что этот граф явно показывает, какая операция алгоритма с какой связана информационно. Всестороннее изучение информационных отношений в процессах реализации алгоритмов или, другими словами, информационной структуры алгоритмов является исключительно важной задачей. В частности, одной из важнейших информационных задач является нахождение всех возможных реализаций алгоритма на вычислительных системах параллельной архитектуры. Ранее было показано, что она эквивалентна описанию всех параллельных форм графа алгоритма. Напомним, что каждая параллельная форма позволяет разбить операции алгоритма на группы. При этом группы операций можно выполнять одна за другой последовательно, а все операции внутри каждой группы - параллельно.
Пока нет никаких оснований, мешающих рассматривать граф алгоритма
как произвольный ориентированный
Степень важности разверток для исследования структуры алгоритмов через их графы определяется свойствами разверток. Пусть известна какая-нибудь строгая развертка $$f(x)$$. Каждая вершина графа находится на одной и только на одной поверхности уровня $$f(x)=c$$ развертки $$f(x)$$. Разобьем все вершины графа на группы по принадлежности поверхностям уровней и перенумеруем группы в порядке роста константы c. Ясно, что группы операций можно выполнять последовательно в том же порядке. На любой поверхности уровня никакие точки-вершины не могут быть связаны ни дугами графа алгоритма, ни его путями. Это означает, что соответствующие таким вершинам операции можно выполнять параллельно. Другими словами, знание любой строгой развертки позволяет через ее поверхности уровней построить параллельную форму графа или, что то же самое, параллельную форму алгоритма. Верно и обратное: любой параллельной форме можно сопоставить вполне определенную строгую развертку. Для ее построения необходимо положить значение развертки в каждой вершине x равным номеру того яруса параллельной формы, в котором располагается эта вершина x.
Таким образом, между строгими развертками и параллельными формами алгоритма установлено взаимное соответствие. Граф алгоритма и развертки являются математическими объектами. Следовательно, на основе их использования можно создать математический аппарат для изучения параллелизма в алгоритмах. Эффективность изучения во многом будет зависеть от того, насколько в подходящем для исследований виде удастся представить граф алгоритма и в каком классе функционалов придется искать развертки. Вполне возможно, что в желаемом классе не окажется ни одной строгой развертки. И тогда окажутся важными обобщенные развертки, по крайней мере, как естественное замыкание множества строгих разверток.
Прежде чем переходить к математическим исследованиям, полезно
рассмотреть компьютерную интерпретацию графа алгоритма и его
разверток. Она поможет в дальнейшем лучшему пониманию получаемых
результатов. Перенумеруем каким-либо образом все вершины графа.
Развертки определены на конечном числе точек. Поэтому строгую или
обобщенную развертку можно также задать вектором, в котором
размерность равна числу вершин графа алгоритма, номер координаты
совпадает с номером вершины, а значение каждой координаты есть
значение развертки в соответствующей точке. Рассмотрим какую-нибудь
реализацию какой-нибудь схемы алгоритма на каком-нибудь реальном
параллельном или последовательном компьютере. Каковы бы не были
Поместим в каждую вершину графа алгоритма функциональное
устройство, имеющее возможность выполнять соответствующую операцию.
Пусть
Выше отмечалось, что среди этих режимов заведомо присутствуют такие, которые отражают любые реальные реализации алгоритма. Но очевидно, что имеются и другие режимы функционирования граф-машины, которые следует отнести к каким-то гипотетическим реализациям на гипотетических компьютерах. Возможно, наличие именно этих режимов позволит находить более эффективные схемы реализации конкретных алгоритмов и, следовательно, разрабатывать для них вычислительные системы более подходящей архитектуры.
Конечно, не стоит рассматривать граф-машину как прямой прообраз некоторой реальной вычислительной системы. В этом отношении она имеет немало недостатков. В ней очень много функциональных устройств и линий связи, каждое устройство и каждая линия связи срабатывают только по одному разу, совсем не используется память и т.д. Более того, несмотря на большое число устройств, граф-машина имеет возможность реализовывать только один алгоритм. Однако граф-машина и не предназначена для того, чтобы быть непосредственным прообразом реальной универсальной системы. Имеются две основные области ее использования. Во-первых, граф-машина является хорошим инструментом для изучения любых существующих и даже еще не существующих реализаций конкретного алгоритма. И, во-вторых, с помощью некоторых специальных преобразований именно из граф-машины можно построить математические модели многих типов вычислительных систем. Среди них имеются и такие, которые реализуют алгоритм за минимально возможное время, но обладают лучшими "техническими" характеристиками.
Несколько слов об этих преобразованиях. В их основе лежит
гомоморфная свертка граф-машины в граф некоторой вычислительной
системы со многими функциональными устройствами. Рассмотрим
произвольный ориентированный граф $$G$$ с множеством вершин $$V$$ и множеством
дуг $$Е$$. Сейчас граф может не быть
(рис 7.1) Операции простого гомоморфизмаПростым и конструктивным приемом осуществления гомоморфной свертки
является операция проектирования. Если граф расположен в пространстве $$X$$, то спроектируем его вдоль любой прямой на перпендикулярную
Гомоморфная свертка имеет очень прозрачный "компьютерный" смысл. Если граф $$G$$ представляет граф-машину, то, выбирая вершины $$u, v$$, мы определяем две операции алгоритма и два ФУ, которые эти операции реализуют. Сливая вершины $$u, v$$, мы связываем с вершиной $$z$$ не одну, а пару операций. ФУ, соотответствующее вершине $$z$$, должно иметь возможность выполнить обе операции последовательно. После многократного применения операции простого гомоморфизма полученный граф можно рассматривать как граф новой модели вычислительной системы. ФУ, связанное с любой его вершиной, обязано последовательно выполнять все операции алгоритма, связанные со всеми вершинами-прообразами. Дуги по-прежнему символизируют направленные передачи информации. Наличие петли около вершины говорит о том, что соответствующее ФУ будет срабатывать многократно.
Имеется одно принципиальное отличие граф-машины от вычислительной системы, полученной при гомоморфной свертке. Граф-машина не имеет память. Роль ее ячеек успешно выполняют сами ФУ в силу того, что каждое из них срабатывает только один раз. При многократном срабатывании ФУ для сохранения результатов предшествующих срабатываний уже нужна память. Зная граф алгоритма и временной режим срабатываний ФУ новой системы, можно подсчитать величину требуемой памяти и даже изучить процесс ее использования.
В общем случае на вычислительной системе, полученной после гомоморфной свертки, нельзя реализовать все временные режимы, допустимые для граф-машины. Тем не менее, имеет место важная
Теорема о гомоморфной свертке. Пусть при гомоморфной свертке граф- машины сливаются лишь вершины, связанные едиными путями. Тогда на вычислительной системе с полученным графом можно реализовать то же множество временных режимов, что и на граф-машине.
Достаточная разнесенность во времени моментов включения ФУ построенной системы гарантируется здесь тем, что сливаемые вершины находятся на одном пути. Поэтому соответствующие им операции как обязаны были раньше, так и имеют возможность теперь выполняться последовательно друг за другом. Подчеркнем также, что совсем не обязательно, чтобы образ сливаемых вершин имел в качестве своих прообразов все вершины, находящиеся на одном пути. Важно лишь, чтобы прообразы были связаны одним путем. Это обстоятельство имеет существенное значение, так как чаще всего объединяются вершины, соответствующие однотипным операциям, а они обычно в вычислениях перемешиваются с операциями других типов. Что же касается установления соответствия между вершинами графа алгоритма и срабатываниями ФУ, помещенными в вершины графа вычислительной системы, полученной после гомоморфной свертки, то теперь оно очень простое. Именно, если из двух вершин графа алгоритма одна достижима из другой, то из двух соответствующих срабатываний ФУ ей соответствует более позднее.
Таким образом, разбивая вершины графа алгоритма на подмножества, лежащие на одном пути, и объединяя их с помощью операций простого гомоморфизма, мы получаем конструктивный способ построения математических моделей вычислительных систем. Естественно, что таких систем может быть много, и о ни, вообще говоря, не одинаковы с точки зрения состава ФУ, их загруженности, размера присоединенной памяти, сложности коммуникационной сети и т. п. Но все эти системы по своим основным параметрам, кроме размера памяти, лучше, чем граф-машина. Они содержат меньшее число ФУ, загруженность каждого ФУ больше, число линий связи между ФУ меньше и при этом часто реализуется весь спектр временных режимов, включая наискорейшие. Снова можно ставить задачу оптимизации, пытаясь разбить вершины графа алгоритма на наименьшее число подмножеств, лежащих на одном пути. И снова возникает противоречивая ситуация: уменьшение числа ФУ может привести к усложнению коммуникационной сети и увеличению объема памяти. Описанная свертка граф-машины была с успехом использована при построении математических моделей систолических массивов .
Но вернемся к исследованию параллелизма с помощью разверток.
Изучение
В ближайших рассмотрениях особый интерес будут представлять различные множества, образованные группами вершин, лежащих на поверхностях уровней разверток. Выделяются два типа разверток. Один тип составляют развертки, которые обеспечивают отсутствие связей внутри множеств. Это строгие развертки. Они дают возможность обнаружить в алгоритме микропараллелизм. Второй тип составляют развертки, которые обеспечивают отсутствие связей между множествами. Такие развертки называются расщепляющими. Они позволяют расщепить алгоритм на не связанные между собой фрагменты или, другими словами, позволяют обнаружить макропараллелизм.
Продемонстрируем подобное расщепление на примере использования обобщенных разверток. Докажем сначала два полезных факта. Пусть для графа алгоритма G построены обобщенные развертки $$f_1(x),f_(x)$$. Как следует из определения разверток, функционал $$f(x)=f_1(x)+f_2(x)$$ также будет обобщенной разверткой. Рассмотрим какую-нибудь поверхность уровня развертки $$f(x)$$, содержащую не менее двух вершин-точек $$х_1$$ и $$x_2$$. Допустим, что для этих точек $$f(x_1)=f(x_2)$$, но $$f_1(x_1)\neq f_1(x_2)$$. Предположим, например, что $$f_(x_1)>f_1(x_2)$$. Отсюда сразу же вытекает, что $$f_2(x_1)<f_2(x_2)$$. Если точки связаны путем графа $$G$$, то для любой развертки путь может идти лишь из точки с меньшим ее значением в точку с большим значением. Поэтому заключаем, что точки $$x_1$$ и $$x_2$$ не могут быть связаны путем графа $$G$$. Аналогичный вывод имеет место и в случае предположения $$f_1(x_1)<f_1(x_2)$$.
С другой стороны, при выполнении условий $$f(x_1)=f(x_2)$$ и $$f_1(x_1)=f_1(x_2)$$ будет также выполняться равенство $$f_2(x_1)=f_2(x_2)$$. Следовательно, точки $$х_, х_2$$ из одной поверхности уровня развертки $$f(x)$$ будут находиться и на каких-то поверхностях уровней разверток $$f_1(x)$$ и $$f_2(x)$$. Более того, при выполнении указанных равенств для любой пары точек $$х_1, х_2$$, принадлежащих любому фиксированному множеству из одной поверхности уровня развертки $$f(x)$$, все точки множества будут лежать на одной и той же поверхности уровня развертки $$f_1(x)$$ и на одной и той же поверхности уровня развертки $$f_2(x)$$. Действительно, пусть в рассматриваемом множестве имеется точка $$x$$, отличная от точек $$x_1, x_2$$. Тогда при выполнении условий $$f(x_1)=f(x)$$ и $$f_1(x_1)=f_1(x)$$ для пары точек $$x_1, x$$ будет выполняться и равенство $$f_2(x_1)=f_2(x)$$. Но значения $$f_1(x_1)$$ и $$f_2(x_1)$$ однозначно определяют поверхности уровней.
Конечно, в частном случае рассматриваемое множество может полностью совпадать со всей поверхностью уровня. Предположим, что каждая поверхность уровня развертки $$f(x)$$ содержится в какой-то поверхности уровня развертки $$f_1(x)$$ или $$f_2(x)$$. Все три развертки относятся к одному и тому же графу. Поэтому число всех вершин во всех поверхностях уровней для каждой развертки будет одним и тем же. Отсюда вытекает, что рассматриваемые как множества совокупности всех поверхностей уровней разверток $$f_1(x),f_2(x)$$ и $$f(x)$$ совпадают.
Пусть для графа алгоритма $$G$$ построены обобщенные развертки $$f_1(x),f2(x),\ldots,f_s(x)$$, где $$s\ge 2$$. Функционал $$F_k(x)=f_1(x)+f_2(x)+\ldots+f_k(x)$$ также будет обобщенной разверткой при любом $$к\ge 1$$. Теперь по развертке $$F_s(x)$$ в соответствии с ее поверхностями уровней расщепим множество вершин графа алгоритма на последовательно связанные между собой группы. Возьмем далее развертку $$F_(s-1)(x)$$ и в соответствии с ее поверхностями уровней расщепим каждую из групп на подгруппы. Каждая из подгрупп соответствует пересечению поверхностей уровней разверток $$F_s(x)$$ и $$F_{s-1}(x)$$. Допустим, что на поверхности уровня развертки $$F_s(x)$$ имеются такие точки $$х_1$$ и $$х_2$$, что $$F_{s-1}(x_1)\neq F_{s-1}(x2)$$. Согласно сказанному выше точки $$х_1$$ и $$x_2$$ не могут быть связаны путем графа $$G$$. Вследствие условия $$F_{s-1}(x_1)\neq F_{s-1}(x_2)$$ они заведомо принадлежат разным подгруппам. По этой причине любые две точки $$х_1$$ и $$x_2$$, взятые по одной из этих двух подгрупп, не могут удовлетворять условию $$F_{s-1}(x_1)=F_{s-1}(x_2)$$. Поэтому подгруппы оказываются параллельными.
Если на каждой поверхности уровня развертки $$F_s(x)$$ для любой пары точек $$x_1$$ и $$х_2$$ будет выполняться равенство $$F_{s-1}(x_1)=F_{s-1}(x_2)$$, то в соответствии со сказанным ранее это означает, что поверхности уровней разверток $$F_s(x), F_{s-1}(x)$$ и $$f_s(x)$$ совпадают. Следовательно, по сравнению с набором разверток $$f_(x), f_2(x),\ldots,f_{s-i}(x)$$ развертка $$f_s(x)$$ не добавляет новой информации в отношении распределения вершин-точек графа по поверхностям уровней и ее можно исключить из рассмотрения. В случае успешного использования развертки $$f_s(x)$$ далее пытаемся расщепить подгруппы на параллельные множества с помощью развертки $$F_{s-2}(x)$$ и т.д.
Заметим, что сейчас не идет речь о поиске наилучших в каком-либо смысле параллельных множеств. Демонстрируется лишь возможность использования обобщенных разверток для обнаружения какого-то параллелизма.
Вообще говоря, развертки устроены достаточно сложно. Множество обобщенных разверток замкнуто в отношении некоторых операций над ними. Из определения разверток можно заключить, что обобщенной разверткой является
Можно также показать, что в отношении трех последних операций множество обобщенных разверток представляет полумодуль. В нем существуют "нулевая" и "единичная" развертка, а также "оптимальная" развертка, обеспечивающая реализацию алгоритма за минимальное время при наличии ограничений снизу на времена выполнения операций и времена передачи данных. Различные нетривиальные свойства разверток описаны в и приведенной там литературе.
Будем по-прежнему считать, что граф алгоритма расположен в
Пусть векторы $$s_1,\ldots,s_p$$ описывают множество
Уравнения $$(x,q)=c$$ при разных значениях $$c$$ задают в $$X$$ некоторое
семейство гиперплоскостей. По отношению к
Выберем возрастающую последовательность чисел $$c_0,c_1,\ldots,c_m$$. Будем
считать для определенности, что в отрицательном (неотрицательном)
полупространстве
Пусть снова векторы $$s_1,\ldots,s_p$$ описывают все множество
Каждый параллелепипед однозначно характеризуется r -мерной совокупностью своих номеров $$\alpha_1,\alpha_2,\ldots,\alpha_r$$. Рассмотрим два параллелепипеда с номерами $$\alpha_1,\alpha_2,\ldots,\alpha_r$$ и $$\beta_1,\beta_2,\ldots,\beta_r$$. По построению, дуга из первого параллелепипеда может идти во второй только в том случае, когда для всех $$i=1,2,\ldots,r$$ выполняются нестрогие неравенства $$\alpha_i\le\beta_i$$, и хотя бы для одного значения $$i$$, например, равного $$j$$, имеет место строгое неравенство $$\alpha_j<\beta_j$$. Просуммировав почленно все эти неравенства, заключаем, что необходимо должно выполняться суммарное неравенство $$\alpha_1+\alpha_2+\ldots+\alpha_r<\beta_1+\beta_2+\ldots+\beta_r$$. Разобьем параллелепипеды на группы, относя к одной группе те и только те из них, которые будут иметь одинаковые суммы номеров $$\alpha=\alpha_1+\alpha_2+\ldots+\alpha_r$$. Как вытекает из суммарного неравенства, в одной группе не могут существовать параллелепипеды, связанные между собой дугами графа. Из него же следует, что дуга не может идти из параллелепипеда с большей суммой номеров в параллелепипед с меньшей суммой номеров. Упорядочим группы по росту суммы номеров, начиная с $$\alpha=1$$. Возможно, некоторые из групп окажутся пустыми. Однако это не мешает выполнять группы фрагментов последовательно друг за другом в порядке роста суммы номеров. Внутри же каждой группы фрагменты не связаны между собой и их можно выполнять параллельно.
Итак, знание хотя бы двух независимых линейных разверток, причем не обязательно строгих, позволяет перейти от описания алгоритма в терминах исходных операций к описанию того же алгоритма, но уже в терминах его фрагментов или, другими словами, в терминах более крупных макроопераций. Для макроописания алгоритма легко находится параллельная форма. Чем больше известно независимых разверток, тем больше ширина ярусов у этой параллельной формы. Но чем больше ширина ярусов, тем больше параллелизма удается выявить в алгоритме. С этой точки зрения наиболее интересным является случай, когда число известных разверток совпадает с размерностью того пространства, в котором размещен граф алгоритма.
Пусть граф является строго направленным относительно какого-то
вектора $$q$$. Из соображений непрерывности ясно, что всегда можно найти
полный базис близких к $$q$$ векторов, по отношению к которым граф также
является строго направленным. Однако их прямое использование не всегда
бывает целесообразным или даже становится невозможным. Если среди дуг
графа много таких, которые близки к ортогональным по отношению к
вектору $$q$$, то это приводит к появлению сильно сжатых вдоль вектора $$q$$
параллелепипедов. Нередко такое сжатие оказывается тем сильнее, чем
больше сам граф, что, в свою очередь, влечет за собой большие
вычислительные и организационные трудности в реализации макроопераций.
На практике более удобно иметь дело с
Очень важно, что размеры всех макроопераций можно регулировать за счет выбора "толщины" полуслоев. Предположим, что макрооперации реализуются на отдельных процессорах многопроцессорной вычислительной системы. В общем случае, при увеличении параллелепипеда количество попавших в него операций алгоритма, т.е. время реализации макрооперации, растет как объем параллелепипеда. Количество же связей с другими макрооперациями, т.е. количество дуг, пересекающих грани параллелепипеда, растет как площадь его поверхности. Объем растет быстрее площади поверхности. Поэтому при увеличении макроопераций полезная загруженность процессоров будет увеличиваться, поскольку на выполнение собственно самих операций будет тратиться относительно больше времени, чем на обмен информацией с другими процессорами.
Одним из самых интересных классов алгоритмов, графы которых
оказываются направленными, являются
Будем размещать вершины графа алгоритма в точках области $$D$$ с целочисленными координатами. Вершине, задаваемой вектором $$x$$, поставим в соответствие функцию $$F_x$$. Если $$x\in D$$, то из рекуррентных соотношений вытекает, что в вершину $$x$$ будут входить дуги из вершин $$x-x_1,\ldots,x-x_r$$ и только из этих вершин. В случае, когда какой-то из векторов $$x-x_i$$ не принадлежит области $$D$$, вектор $$x-x_i$$ будет символизировать функцию ввода переменной $$u(x-x_1)$$. Построенный таким образом граф имеет очень простую структуру. Если дуги задавать векторами, то в каждую вершину из области $$D$$ будет входить один и тот же пучок дуг, который переносится параллельно от одной вершины к другой. Графы подобного вида называются регулярными, а образующие их векторы $$x_1, \ldots, x_r$$ - базовыми. Заметим, что при других размещениях вершин графа алгоритма регулярная структура дуг может нарушаться. Данный пример наглядно подтверждает важность согласования формы записи алгоритма с формой представления его графа.
Допустим, что для регулярного графа найдена линейная развертка $$(x,q)$$ с целочисленным вектором $$q$$. Так как вершины графа расположены в
точках с целочисленными координатами, то уравнение любой поверхности
уровня $$(x,q)=с$$ есть уравнение
Как уже отмечалось ранее, при заданном алгоритме и входных данных граф алгоритма определяется однозначно и представляет информационное ядро алгоритма. Такая его интерпретация связана с тем, что этот граф явно показывает, какая операция алгоритма с какой связана информационно. Всестороннее изучение информационных отношений в процессах реализации алгоритмов или, другими словами, информационной структуры алгоритмов является исключительно важной задачей. В частности, одной из важнейших информационных задач является нахождение всех возможных реализаций алгоритма на вычислительных системах параллельной архитектуры. Ранее было показано, что она эквивалентна описанию всех параллельных форм графа алгоритма. Напомним, что каждая параллельная форма позволяет разбить операции алгоритма на группы. При этом группы операций можно выполнять одна за другой последовательно, а все операции внутри каждой группы - параллельно.
Пока нет никаких оснований, мешающих рассматривать граф алгоритма
как произвольный ориентированный
Степень важности разверток для исследования структуры алгоритмов через их графы определяется свойствами разверток. Пусть известна какая-нибудь строгая развертка $$f(x)$$. Каждая вершина графа находится на одной и только на одной поверхности уровня $$f(x)=c$$ развертки $$f(x)$$. Разобьем все вершины графа на группы по принадлежности поверхностям уровней и перенумеруем группы в порядке роста константы c. Ясно, что группы операций можно выполнять последовательно в том же порядке. На любой поверхности уровня никакие точки-вершины не могут быть связаны ни дугами графа алгоритма, ни его путями. Это означает, что соответствующие таким вершинам операции можно выполнять параллельно. Другими словами, знание любой строгой развертки позволяет через ее поверхности уровней построить параллельную форму графа или, что то же самое, параллельную форму алгоритма. Верно и обратное: любой параллельной форме можно сопоставить вполне определенную строгую развертку. Для ее построения необходимо положить значение развертки в каждой вершине x равным номеру того яруса параллельной формы, в котором располагается эта вершина x.
Таким образом, между строгими развертками и параллельными формами алгоритма установлено взаимное соответствие. Граф алгоритма и развертки являются математическими объектами. Следовательно, на основе их использования можно создать математический аппарат для изучения параллелизма в алгоритмах. Эффективность изучения во многом будет зависеть от того, насколько в подходящем для исследований виде удастся представить граф алгоритма и в каком классе функционалов придется искать развертки. Вполне возможно, что в желаемом классе не окажется ни одной строгой развертки. И тогда окажутся важными обобщенные развертки, по крайней мере, как естественное замыкание множества строгих разверток.
Прежде чем переходить к математическим исследованиям, полезно
рассмотреть компьютерную интерпретацию графа алгоритма и его
разверток. Она поможет в дальнейшем лучшему пониманию получаемых
результатов. Перенумеруем каким-либо образом все вершины графа.
Развертки определены на конечном числе точек. Поэтому строгую или
обобщенную развертку можно также задать вектором, в котором
размерность равна числу вершин графа алгоритма, номер координаты
совпадает с номером вершины, а значение каждой координаты есть
значение развертки в соответствующей точке. Рассмотрим какую-нибудь
реализацию какой-нибудь схемы алгоритма на каком-нибудь реальном
параллельном или последовательном компьютере. Каковы бы не были
Поместим в каждую вершину графа алгоритма функциональное
устройство, имеющее возможность выполнять соответствующую операцию.
Пусть
Выше отмечалось, что среди этих режимов заведомо присутствуют такие, которые отражают любые реальные реализации алгоритма. Но очевидно, что имеются и другие режимы функционирования граф-машины, которые следует отнести к каким-то гипотетическим реализациям на гипотетических компьютерах. Возможно, наличие именно этих режимов позволит находить более эффективные схемы реализации конкретных алгоритмов и, следовательно, разрабатывать для них вычислительные системы более подходящей архитектуры.
Конечно, не стоит рассматривать граф-машину как прямой прообраз некоторой реальной вычислительной системы. В этом отношении она имеет немало недостатков. В ней очень много функциональных устройств и линий связи, каждое устройство и каждая линия связи срабатывают только по одному разу, совсем не используется память и т.д. Более того, несмотря на большое число устройств, граф-машина имеет возможность реализовывать только один алгоритм. Однако граф-машина и не предназначена для того, чтобы быть непосредственным прообразом реальной универсальной системы. Имеются две основные области ее использования. Во-первых, граф-машина является хорошим инструментом для изучения любых существующих и даже еще не существующих реализаций конкретного алгоритма. И, во-вторых, с помощью некоторых специальных преобразований именно из граф-машины можно построить математические модели многих типов вычислительных систем. Среди них имеются и такие, которые реализуют алгоритм за минимально возможное время, но обладают лучшими "техническими" характеристиками.
Несколько слов об этих преобразованиях. В их основе лежит
гомоморфная свертка граф-машины в граф некоторой вычислительной
системы со многими функциональными устройствами. Рассмотрим
произвольный ориентированный граф $$G$$ с множеством вершин $$V$$ и множеством
дуг $$Е$$. Сейчас граф может не быть
(рис 7.1) Операции простого гомоморфизмаПростым и конструктивным приемом осуществления гомоморфной свертки
является операция проектирования. Если граф расположен в пространстве $$X$$, то спроектируем его вдоль любой прямой на перпендикулярную
Гомоморфная свертка имеет очень прозрачный "компьютерный" смысл. Если граф $$G$$ представляет граф-машину, то, выбирая вершины $$u, v$$, мы определяем две операции алгоритма и два ФУ, которые эти операции реализуют. Сливая вершины $$u, v$$, мы связываем с вершиной $$z$$ не одну, а пару операций. ФУ, соотответствующее вершине $$z$$, должно иметь возможность выполнить обе операции последовательно. После многократного применения операции простого гомоморфизма полученный граф можно рассматривать как граф новой модели вычислительной системы. ФУ, связанное с любой его вершиной, обязано последовательно выполнять все операции алгоритма, связанные со всеми вершинами-прообразами. Дуги по-прежнему символизируют направленные передачи информации. Наличие петли около вершины говорит о том, что соответствующее ФУ будет срабатывать многократно.
Имеется одно принципиальное отличие граф-машины от вычислительной системы, полученной при гомоморфной свертке. Граф-машина не имеет память. Роль ее ячеек успешно выполняют сами ФУ в силу того, что каждое из них срабатывает только один раз. При многократном срабатывании ФУ для сохранения результатов предшествующих срабатываний уже нужна память. Зная граф алгоритма и временной режим срабатываний ФУ новой системы, можно подсчитать величину требуемой памяти и даже изучить процесс ее использования.
В общем случае на вычислительной системе, полученной после гомоморфной свертки, нельзя реализовать все временные режимы, допустимые для граф-машины. Тем не менее, имеет место важная
Теорема о гомоморфной свертке. Пусть при гомоморфной свертке граф- машины сливаются лишь вершины, связанные едиными путями. Тогда на вычислительной системе с полученным графом можно реализовать то же множество временных режимов, что и на граф-машине.
Достаточная разнесенность во времени моментов включения ФУ построенной системы гарантируется здесь тем, что сливаемые вершины находятся на одном пути. Поэтому соответствующие им операции как обязаны были раньше, так и имеют возможность теперь выполняться последовательно друг за другом. Подчеркнем также, что совсем не обязательно, чтобы образ сливаемых вершин имел в качестве своих прообразов все вершины, находящиеся на одном пути. Важно лишь, чтобы прообразы были связаны одним путем. Это обстоятельство имеет существенное значение, так как чаще всего объединяются вершины, соответствующие однотипным операциям, а они обычно в вычислениях перемешиваются с операциями других типов. Что же касается установления соответствия между вершинами графа алгоритма и срабатываниями ФУ, помещенными в вершины графа вычислительной системы, полученной после гомоморфной свертки, то теперь оно очень простое. Именно, если из двух вершин графа алгоритма одна достижима из другой, то из двух соответствующих срабатываний ФУ ей соответствует более позднее.
Таким образом, разбивая вершины графа алгоритма на подмножества, лежащие на одном пути, и объединяя их с помощью операций простого гомоморфизма, мы получаем конструктивный способ построения математических моделей вычислительных систем. Естественно, что таких систем может быть много, и о ни, вообще говоря, не одинаковы с точки зрения состава ФУ, их загруженности, размера присоединенной памяти, сложности коммуникационной сети и т. п. Но все эти системы по своим основным параметрам, кроме размера памяти, лучше, чем граф-машина. Они содержат меньшее число ФУ, загруженность каждого ФУ больше, число линий связи между ФУ меньше и при этом часто реализуется весь спектр временных режимов, включая наискорейшие. Снова можно ставить задачу оптимизации, пытаясь разбить вершины графа алгоритма на наименьшее число подмножеств, лежащих на одном пути. И снова возникает противоречивая ситуация: уменьшение числа ФУ может привести к усложнению коммуникационной сети и увеличению объема памяти. Описанная свертка граф-машины была с успехом использована при построении математических моделей систолических массивов .
Но вернемся к исследованию параллелизма с помощью разверток.
Изучение
В ближайших рассмотрениях особый интерес будут представлять различные множества, образованные группами вершин, лежащих на поверхностях уровней разверток. Выделяются два типа разверток. Один тип составляют развертки, которые обеспечивают отсутствие связей внутри множеств. Это строгие развертки. Они дают возможность обнаружить в алгоритме микропараллелизм. Второй тип составляют развертки, которые обеспечивают отсутствие связей между множествами. Такие развертки называются расщепляющими. Они позволяют расщепить алгоритм на не связанные между собой фрагменты или, другими словами, позволяют обнаружить макропараллелизм.
Продемонстрируем подобное расщепление на примере использования обобщенных разверток. Докажем сначала два полезных факта. Пусть для графа алгоритма G построены обобщенные развертки $$f_1(x),f_(x)$$. Как следует из определения разверток, функционал $$f(x)=f_1(x)+f_2(x)$$ также будет обобщенной разверткой. Рассмотрим какую-нибудь поверхность уровня развертки $$f(x)$$, содержащую не менее двух вершин-точек $$х_1$$ и $$x_2$$. Допустим, что для этих точек $$f(x_1)=f(x_2)$$, но $$f_1(x_1)\neq f_1(x_2)$$. Предположим, например, что $$f_(x_1)>f_1(x_2)$$. Отсюда сразу же вытекает, что $$f_2(x_1)<f_2(x_2)$$. Если точки связаны путем графа $$G$$, то для любой развертки путь может идти лишь из точки с меньшим ее значением в точку с большим значением. Поэтому заключаем, что точки $$x_1$$ и $$x_2$$ не могут быть связаны путем графа $$G$$. Аналогичный вывод имеет место и в случае предположения $$f_1(x_1)<f_1(x_2)$$.
С другой стороны, при выполнении условий $$f(x_1)=f(x_2)$$ и $$f_1(x_1)=f_1(x_2)$$ будет также выполняться равенство $$f_2(x_1)=f_2(x_2)$$. Следовательно, точки $$х_, х_2$$ из одной поверхности уровня развертки $$f(x)$$ будут находиться и на каких-то поверхностях уровней разверток $$f_1(x)$$ и $$f_2(x)$$. Более того, при выполнении указанных равенств для любой пары точек $$х_1, х_2$$, принадлежащих любому фиксированному множеству из одной поверхности уровня развертки $$f(x)$$, все точки множества будут лежать на одной и той же поверхности уровня развертки $$f_1(x)$$ и на одной и той же поверхности уровня развертки $$f_2(x)$$. Действительно, пусть в рассматриваемом множестве имеется точка $$x$$, отличная от точек $$x_1, x_2$$. Тогда при выполнении условий $$f(x_1)=f(x)$$ и $$f_1(x_1)=f_1(x)$$ для пары точек $$x_1, x$$ будет выполняться и равенство $$f_2(x_1)=f_2(x)$$. Но значения $$f_1(x_1)$$ и $$f_2(x_1)$$ однозначно определяют поверхности уровней.
Конечно, в частном случае рассматриваемое множество может полностью совпадать со всей поверхностью уровня. Предположим, что каждая поверхность уровня развертки $$f(x)$$ содержится в какой-то поверхности уровня развертки $$f_1(x)$$ или $$f_2(x)$$. Все три развертки относятся к одному и тому же графу. Поэтому число всех вершин во всех поверхностях уровней для каждой развертки будет одним и тем же. Отсюда вытекает, что рассматриваемые как множества совокупности всех поверхностей уровней разверток $$f_1(x),f_2(x)$$ и $$f(x)$$ совпадают.
Пусть для графа алгоритма $$G$$ построены обобщенные развертки $$f_1(x),f2(x),\ldots,f_s(x)$$, где $$s\ge 2$$. Функционал $$F_k(x)=f_1(x)+f_2(x)+\ldots+f_k(x)$$ также будет обобщенной разверткой при любом $$к\ge 1$$. Теперь по развертке $$F_s(x)$$ в соответствии с ее поверхностями уровней расщепим множество вершин графа алгоритма на последовательно связанные между собой группы. Возьмем далее развертку $$F_(s-1)(x)$$ и в соответствии с ее поверхностями уровней расщепим каждую из групп на подгруппы. Каждая из подгрупп соответствует пересечению поверхностей уровней разверток $$F_s(x)$$ и $$F_{s-1}(x)$$. Допустим, что на поверхности уровня развертки $$F_s(x)$$ имеются такие точки $$х_1$$ и $$х_2$$, что $$F_{s-1}(x_1)\neq F_{s-1}(x2)$$. Согласно сказанному выше точки $$х_1$$ и $$x_2$$ не могут быть связаны путем графа $$G$$. Вследствие условия $$F_{s-1}(x_1)\neq F_{s-1}(x_2)$$ они заведомо принадлежат разным подгруппам. По этой причине любые две точки $$х_1$$ и $$x_2$$, взятые по одной из этих двух подгрупп, не могут удовлетворять условию $$F_{s-1}(x_1)=F_{s-1}(x_2)$$. Поэтому подгруппы оказываются параллельными.
Если на каждой поверхности уровня развертки $$F_s(x)$$ для любой пары точек $$x_1$$ и $$х_2$$ будет выполняться равенство $$F_{s-1}(x_1)=F_{s-1}(x_2)$$, то в соответствии со сказанным ранее это означает, что поверхности уровней разверток $$F_s(x), F_{s-1}(x)$$ и $$f_s(x)$$ совпадают. Следовательно, по сравнению с набором разверток $$f_(x), f_2(x),\ldots,f_{s-i}(x)$$ развертка $$f_s(x)$$ не добавляет новой информации в отношении распределения вершин-точек графа по поверхностям уровней и ее можно исключить из рассмотрения. В случае успешного использования развертки $$f_s(x)$$ далее пытаемся расщепить подгруппы на параллельные множества с помощью развертки $$F_{s-2}(x)$$ и т.д.
Заметим, что сейчас не идет речь о поиске наилучших в каком-либо смысле параллельных множеств. Демонстрируется лишь возможность использования обобщенных разверток для обнаружения какого-то параллелизма.
Вообще говоря, развертки устроены достаточно сложно. Множество обобщенных разверток замкнуто в отношении некоторых операций над ними. Из определения разверток можно заключить, что обобщенной разверткой является
Можно также показать, что в отношении трех последних операций множество обобщенных разверток представляет полумодуль. В нем существуют "нулевая" и "единичная" развертка, а также "оптимальная" развертка, обеспечивающая реализацию алгоритма за минимальное время при наличии ограничений снизу на времена выполнения операций и времена передачи данных. Различные нетривиальные свойства разверток описаны в и приведенной там литературе.
Будем по-прежнему считать, что граф алгоритма расположен в
Пусть векторы $$s_1,\ldots,s_p$$ описывают множество
Уравнения $$(x,q)=c$$ при разных значениях $$c$$ задают в $$X$$ некоторое
семейство гиперплоскостей. По отношению к
Выберем возрастающую последовательность чисел $$c_0,c_1,\ldots,c_m$$. Будем
считать для определенности, что в отрицательном (неотрицательном)
полупространстве
Пусть снова векторы $$s_1,\ldots,s_p$$ описывают все множество
Каждый параллелепипед однозначно характеризуется r -мерной совокупностью своих номеров $$\alpha_1,\alpha_2,\ldots,\alpha_r$$. Рассмотрим два параллелепипеда с номерами $$\alpha_1,\alpha_2,\ldots,\alpha_r$$ и $$\beta_1,\beta_2,\ldots,\beta_r$$. По построению, дуга из первого параллелепипеда может идти во второй только в том случае, когда для всех $$i=1,2,\ldots,r$$ выполняются нестрогие неравенства $$\alpha_i\le\beta_i$$, и хотя бы для одного значения $$i$$, например, равного $$j$$, имеет место строгое неравенство $$\alpha_j<\beta_j$$. Просуммировав почленно все эти неравенства, заключаем, что необходимо должно выполняться суммарное неравенство $$\alpha_1+\alpha_2+\ldots+\alpha_r<\beta_1+\beta_2+\ldots+\beta_r$$. Разобьем параллелепипеды на группы, относя к одной группе те и только те из них, которые будут иметь одинаковые суммы номеров $$\alpha=\alpha_1+\alpha_2+\ldots+\alpha_r$$. Как вытекает из суммарного неравенства, в одной группе не могут существовать параллелепипеды, связанные между собой дугами графа. Из него же следует, что дуга не может идти из параллелепипеда с большей суммой номеров в параллелепипед с меньшей суммой номеров. Упорядочим группы по росту суммы номеров, начиная с $$\alpha=1$$. Возможно, некоторые из групп окажутся пустыми. Однако это не мешает выполнять группы фрагментов последовательно друг за другом в порядке роста суммы номеров. Внутри же каждой группы фрагменты не связаны между собой и их можно выполнять параллельно.
Итак, знание хотя бы двух независимых линейных разверток, причем не обязательно строгих, позволяет перейти от описания алгоритма в терминах исходных операций к описанию того же алгоритма, но уже в терминах его фрагментов или, другими словами, в терминах более крупных макроопераций. Для макроописания алгоритма легко находится параллельная форма. Чем больше известно независимых разверток, тем больше ширина ярусов у этой параллельной формы. Но чем больше ширина ярусов, тем больше параллелизма удается выявить в алгоритме. С этой точки зрения наиболее интересным является случай, когда число известных разверток совпадает с размерностью того пространства, в котором размещен граф алгоритма.
Пусть граф является строго направленным относительно какого-то
вектора $$q$$. Из соображений непрерывности ясно, что всегда можно найти
полный базис близких к $$q$$ векторов, по отношению к которым граф также
является строго направленным. Однако их прямое использование не всегда
бывает целесообразным или даже становится невозможным. Если среди дуг
графа много таких, которые близки к ортогональным по отношению к
вектору $$q$$, то это приводит к появлению сильно сжатых вдоль вектора $$q$$
параллелепипедов. Нередко такое сжатие оказывается тем сильнее, чем
больше сам граф, что, в свою очередь, влечет за собой большие
вычислительные и организационные трудности в реализации макроопераций.
На практике более удобно иметь дело с
Очень важно, что размеры всех макроопераций можно регулировать за счет выбора "толщины" полуслоев. Предположим, что макрооперации реализуются на отдельных процессорах многопроцессорной вычислительной системы. В общем случае, при увеличении параллелепипеда количество попавших в него операций алгоритма, т.е. время реализации макрооперации, растет как объем параллелепипеда. Количество же связей с другими макрооперациями, т.е. количество дуг, пересекающих грани параллелепипеда, растет как площадь его поверхности. Объем растет быстрее площади поверхности. Поэтому при увеличении макроопераций полезная загруженность процессоров будет увеличиваться, поскольку на выполнение собственно самих операций будет тратиться относительно больше времени, чем на обмен информацией с другими процессорами.
Одним из самых интересных классов алгоритмов, графы которых
оказываются направленными, являются
Будем размещать вершины графа алгоритма в точках области $$D$$ с целочисленными координатами. Вершине, задаваемой вектором $$x$$, поставим в соответствие функцию $$F_x$$. Если $$x\in D$$, то из рекуррентных соотношений вытекает, что в вершину $$x$$ будут входить дуги из вершин $$x-x_1,\ldots,x-x_r$$ и только из этих вершин. В случае, когда какой-то из векторов $$x-x_i$$ не принадлежит области $$D$$, вектор $$x-x_i$$ будет символизировать функцию ввода переменной $$u(x-x_1)$$. Построенный таким образом граф имеет очень простую структуру. Если дуги задавать векторами, то в каждую вершину из области $$D$$ будет входить один и тот же пучок дуг, который переносится параллельно от одной вершины к другой. Графы подобного вида называются регулярными, а образующие их векторы $$x_1, \ldots, x_r$$ - базовыми. Заметим, что при других размещениях вершин графа алгоритма регулярная структура дуг может нарушаться. Данный пример наглядно подтверждает важность согласования формы записи алгоритма с формой представления его графа.
Допустим, что для регулярного графа найдена линейная развертка $$(x,q)$$ с целочисленным вектором $$q$$. Так как вершины графа расположены в
точках с целочисленными координатами, то уравнение любой поверхности
уровня $$(x,q)=с$$ есть уравнение
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.