Что-то долго «рисуется» граф алгоритма для моей программы? Это так сложно? Или это невозможно?...
...По сути детализацией идей ВВ можно считать статью А.Легалова «Стратегии управления в вычислительных системах и языках программирования» (см.
http://www.softcraft.ru/parallel/strat/strat.shtml ).
Там даже есть фраза: «Информационный граф задает связи между данными, обрабатываемыми в ходе вычислений. Он полностью определяет алгоритм решаемой задачи при заданном наборе операций обработки и не изменяется при любых способах организации управления вычислениями.»
Собственно в том, что «полностью» и есть основные сомнения. Более того, в статье чуть ниже упоминается управляющий граф. И здесь же говорится, что «в целом именно управляющий граф определяет порядок выполнения операций и корректность проводимых вычислений».
Так кто из них и что определяет?
Попробую привести пример. Есть кирпичи (данные), из которых нужно построить здание (алгоритм). Информационные связи между кирпичами - это кто, где и над кем (или под кем) и как лежит и т.д. и т.п. Казалось бы все, что нужно для постройки здания есть: правильно по связям лежат кирпичи – имеем правильное здание, неправильно – развалы.
Но если подумать, то информационные связи – это лишь статическая информация об уже имеющемся алгоритме/здании. Возможно, что даже одного из алгоритмов. Мне почему-то кажется, что только в сказке можно подойти к куче кирпичей с перечнем информационных связей между ними, дав команду которым – строиться!, можно сразу пойти курить. Хотя, пожалуй, именно такие цели преследует так называемое непроцедурное программирование.
Но как нельзя построить здание, дав команду «куче кирпичей», так, видимо, не всесильно и непроцедурное программирование. Иначе бы мы уже давно стройки шли бы именно таким образом, а программирование было бы только непроцедурным.
Так вот, должен быть еще некий управляющих граф (УГ), который позволил бы корректно растащить кучу кирпичей, превратив ее в здание. Более того, если есть такой УГ, то не нужен граф информационный (ИГ). Зачем ИГ, если все расписано в УГ, который как раз и определяет в какой последовательности и куда класть кирпичи.
Но процесс «непроцедурной постройки» привлекателен и в общем-то используется тоже. Так, если следовать лишь «процедурному строительству», то мы должны указать куда и в какой последовательности положить каждый камешек в машине щебня. Но зачем, когда достаточно вывалить его и затем разровнять грейдером. Вот вам и две непроцедурные операции в строительстве
Вывод. Мы должны согласиться, что в общем случае информационного графа явно недостаточно. Должен быть еще и управляющий. Более того, наличие ИГ по сути не определяет алгоритм, а вот УГ определяет его даже без ИГ.
Такие или подобные рассуждения, видимо, и приводят нас к следующему понятию модели программы. Модель программы можно рассматривать как тройку S = <M,A,G> (см. подробнее
http://www.softcraft.ru/auto/ka/ash/ash.shtml). И здесь именно управление G определяет параллелизм программы, т.к. в общем случае оно может быть любым – последовательным, параллельным, непроцедурным и т.д. и т.п.
Конечно, хотелось бы лежа на печи, построив информационный граф, отдавать команды типа: «По щучьему велению, по моему хотению! Стройся параллельная программа!». Но, похоже, в ближайшем будущем на это рассчитывать не приходится. И хотя управляющий граф создать сложнее, чем информационный, может, лучше сосредоточить свои усилия именно на совершенствовании этого процесса – построение управляющего графа? Автоматная модель параллельных вычислений/алгоритмов, которой занимаюсь я, это движение по этому пути (один из путей). Кстати для нее характерна и непроцедурность (не надо думать над каждым кирпичом, если есть определенная свобода его перемещения).
Ну и последнее. То, что пока так и нет информационного графа для моего примера, тоже, видимо, о чем-то да говорит. Его или сложно построить или … в нем просто нет смысла. По крайней мере, в данном конкретном случае. Но этот случай не есть аномалия, а есть обычная и очень простая программа. Кстати построить для нее управляющий граф не проблема. Но вот построить эквивалентный параллельный управляющий граф – проблема, которую так пока и не решил здесь на сайте RS. Хотя насколько мне известно информационный графы он может строить «одной левой»
И все же очень хочется посмотреть на информационный граф как формальную модель предложенной реальной программы…