DataFlow Введение в архитектуру

Аватар пользователя Rutel

Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства.

© Балыбердин Андрей Леонидович    Rutel@Mail.ru

 

DataFlow Введение в архитектуру

Новосибирск, 2023 г.

Введение.

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

Вычислительная система с архитектурой Dataflow основана на потоках данных и их обработке, является продолжением сети ССИ с коммутацией каналов. В предыдущих текстах описывалась новая телекоммуникационная парадигма: Синхронная Сетевая Иерархия ССИ. Идея, положенная в ее основу, не является чем-то принципиально новым: Передача данных с равномерной скоростью и промежуточным хранением передаваемых данных в буферных регистрах коммутаторов. Очень похожа на обычную технологию TDM.

Что нового в ССИ (основные моменты)

•    Внесение высокочастотной несинхронности в передачу данных, позволило создавать каналы с произвольной скоростью.

•    Наличие понятия «Нет данных для передачи» совокупности с небольшим запасом скорости выделяемого канала позволило решить проблему нестабильности физических сигналов тактовой частоты различных коммутаторов.

•    Возможность объединения произвольного числа произвольных виртуальных каналов в один, который также может быть объединен с другими каналами.

•    Возможность «вытащить» или «добавить» виртуальный канал без полной разборки суммарного канала.

•    Возможность мгновенно, без согласования с приемником данных, создать новый виртуальный канал (сейчас возможно только для пакетных систем).

•    Возможность создать неограниченное число приемников для каждого из передатчиков, маршрут передачи является ациклическим графом.

•    Появилось понятие тип передаваемых данных, а не просто битовый поток.

При чем же тут Dataflow?

Вычислительная парадигма Dataflow базируется на идее исполнения команды в момент готовности данных для обработки. Идеальной программой для Dataflow является ЯПФ программы (Ярусно-Параллельная Форма программы).

Предложенная в 1974 году MIT (https://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.110.3467&rep=rep1&type=pdf) реализация Dataflow посредством хранимых в контекстно-адресуемой памяти «токенов», является тупиковой и время многократно показало ошибочность данного решения.

Что такое регистры промежуточного хранения данных в сети ССИ с точки зрения парадигмы Dataflow?

 Это просто ячейки памяти, где хранятся данные перед тем, как они будут использованы для вычисления новых данных.

Сеть ССИ представляет собой каналы связи, соединяющие эти ячейки.

 Для того что бы сеть ССИ превратить в Dataflow вычислительную систему, нужно не просто переносить данные из регистров в канал, а выполнять над ними некоторые действия. Сеть доставляет данные к ячейкам, соединенным с исполнительными устройствами (АЛУ), момент прихода данных во все задействованные в конкретном преобразовании ячейки происходит преобразование (исполнение элементарной команды) с передачей результата исполнения дальше по сети.

Что собой представляет программа для Dataflow вычислительной системы?

В современных процессорах программой является последовательность команд. Для Dataflow вычислительной системы программой является топология виртуальной сети, связывающей различные исполнительные устройства. Вычислительный процесс представляет собой простую передачу исходных данных по этой сети, на выходе будет получен результат вычислений.

Перспективы применения технологии ССИ в связке с Dataflow вычислителем.

Основными проблемами (на низком физическом уровне) современной вычислительной техники являются невозможность распараллелить исполняемый поток команд до уровня лучше 4-7 команд  и «бутылочное горлышко» оперативной памяти. Для Dataflow процессора нет необходимости последовательно выполнять команды в порядке заданном программой, единственным ограничением является наличие данных для обработки. С точки зрения программиста, Dataflow программа это ярусно параллельная форма (ЯПФ) ациклического графа.

Архитектура Dataflow процессора.

Изначально имеется программа в виде ЯПФ ациклического графа, которую нужно максимально быстро «выполнить». Каждая вершина такого графа представляет собой элементарную команду, каждая дуга — это виртуальный канал сети ССИ.

Непосредственно воспроизводить ЯПФ с точки зрения аппаратных ресурсов и скорости исполнения не эффективно. Каждый узел (команда) исполняется только один раз. Передача данных по сети ССИ хоть и быстрая, но занимает больше одного такта. Наиболее оптимальным будет подключать к сети ССИ не непосредственных исполнителей команд (АЛУ), а более крупные модули, формирующие поток команд (ФПК). Таких модулей на одном кристалле, может быть, несколько тысяч их можно считать аналогом процессорного ядра, в том числе и по производительности.

Структура ФПК.

Основой формирователя команд является много-портовая ассоциативная память, в которой хранятся команды и данные. Каждая команда исполняется один раз, соответственно имеет уникальные данные (существующие в одном экземпляре).

Каждая ячейка памяти содержит код команды, уникальные идентификаторы исходных данных и идентификатор результата исполнения.

Источником команд может являться как сеть ССИ, так и локальная быстрая память. Источниками данных могут быть результаты исполнения команд данного или соседних ФПК либо данные из сети ССИ.

ФПК постоянно проверяет содержимое присоединенных к модулю буферов сети ССИ и в случае наличия в них данных записывает их в ячейки с одинаковыми идентификаторами. Как только собирается «полный комплект» из кода команды и данных, ФПК формирует запрос к имеющимся АЛУ на исполнение команды. Результат исполнения команды, тоже имеет уникальный идентификатор и должен быть записан в собственную память, передан прописанным «соседним» ФПК для проверки наличия в исходных данных нужного идентификатора или передан в буфер сети ССИ (отправка в другой модуль). В коде команды необходимо указать полный список каналов, где необходим результат исполнения. После полной передачи данные (возможно и команда) могут быть удалены из памяти ФПК.

Подобный алгоритм работы позволяет исполнять пул из нескольких сотен команд по готовности данных, без существенных затрат на поиск и передачу данных.

Если есть необходимость выполнить больше команд чем число ячеек в ассоциативной памяти или результат исполнения требуется для большого числа других команд, то можно поступить несколькими способами:

•    Поместить дополнительные команды в соседнем ФПК.

•    Поместить команды в любом ФПК в пределах одного кристалла и добавить в промежуточные ФПК команды, копирующие результат.

•    Поместить дополнительные команды в ФПК в соседнем модуле (микросхеме).

•    Сохранить весь список исполняемых команд в локальной быстрой памяти (КЭШ) и производить постепенную запись в память ФПК по мере исполнения ранее записанных.

Программа для Dataflow процессора.

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

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

Как решить проблему создания параллельного ПО используя только последовательные конструкции?

Любая создаваемая программа является математической моделью реального или виртуального объекта и решает задачу взаимодействия этого объекта с внешними по отношению к нему данными. Можно утверждать, что для числа данных больше двух не существует полностью последовательных объектов. Если рассматривать программу с этой точки зрения, то в ней неизбежно будет некоторая параллельность.

Выполним мысленный эксперимент: Выполняя программу, одновременно производим запись всей последовательности команд (трек исполнения). Далее необходимо распределить все команды по ярусам. На первом ярусе сгруппированы все команды, для которых данные есть сразу. На втором ярусе команды, для исполнения которых требуются исходные данные и данные вычисленные командами первого яруса и так до исчерпания списка команд. Результатом будет ЯПФ программы для конкретного набора исходных данных. Поскольку для любого набора данных можно получить ЯПФ считаем, что и для программы целиком возможна ЯПФ форма.

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

Преобразование (компиляция) программы на языке высокого уровня в ЯПФ форму.

Особенностью ЯПФ формы является отсутствие циклических конструкций (дерево, ациклический граф). Если в программе нет циклов, только ветвления, создать ЯПФ будет достаточно просто. Ветвления реализуются посредством отсутствия данных для не реализованной ветки условий. В сети ССИ есть понятие отсутствия данных, можно добавить еще и понятие нереализованность. В процессе исполнения программы происходит исполнение всех веток условия, только для не реализовавшегося условия вместо конкретных данных обрабатывается служебный символ «не реализовано».

Необходимо учитывать особенности реализации Dataflow:

·        Каждая команда исполняется только в момент появления всех задействованных в ее работе данных, в том числе и нереализованных.

·        Последовательность исполнения команд задается последовательностью появления данных.

·        Каждое обрабатываемое данное является уникальным, имеет свой уникальный идентификатор.

·        Каждая команда уникальна, уникальность определяется кодом команды и уникальными идентификаторами данных.

·        В результате исполнения команды происходит «уничтожение» исходных данных и «создание» данных результата.

·        Результат исполнения команды может использоваться большим числом других команд. Результат пересылается другим командам полностью независимо друг от друга. Все получатели результата будут иметь свою копию, которую должны использовать в процессе вычисления.

·        Любая команда выполняется за бесконечно малое время с момента появления данных, а вот данные могут распространяться от команды к команде неопределенное время.

·        Никаких ограничений на размер команды, число исходных и число результирующих данных не накладывается.

·        Отдельную команду можно представить как совокупность команд малого размера или наоборот, как составляющую команды большего размера.

Принципы построения компилятора.

Наиболее оптимальным для построения компилятора Dataflow является промежуточный язык LLVM. В LLVM каждое данное порождается одной командой, но есть возможность повторного исполнения участка кода.

В ЯПФ есть возможность параллельного исполнения команд, но нет возможности повторного исполнения. В процессоре с архитектурой фон-Неймана нельзя исполнять параллельно, но можно повторно. Современное ПО создано для исполнения на процессорах с архитектурой фон-Неймана и требуется устранить это противоречие, для того чтобы получить максимальную эффективность работы Dataflow системы.

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

Для Dataflow адресного пространства как такового нет, вместо него пространство уникальных идентификаторов. Для облегчения понимания можно представить двумерное (набор строк) адресное пространство, в котором компилятор будет размещать коды команд ЯПФ программы. Каждая строка содержит последовательность команд, которые могут исполняются только последовательно. Строки, это параллельно исполняемые последовательности команд.

Перед началом компиляции, необходимо для всех начальных данных присвоить уникальные идентификаторы.

Компилятор начинает генерировать программу (ассемблерный код) начиная с первой строки. Если встречается команда, создающая новые данные, то этим данным присваивается уникальный идентификатор.

В момент, когда происходит условный переход, компилятор добавляет еще одну строку и формирует новый поток генерации команд, который записывает последовательность команд формирующийся после срабатывания условного перехода. Предыдущий поток продолжает писать поток команд, соответствующий отсутствию срабатывания условного перехода. Если выполняется вызов функции и нет альтернативных путей исполнения, то запись ведется в ту же самую строку.

Если программа не содержит циклических конструкций, то результатом работы компилятора будет конечное число строк. Часть полученных строк будет напрямую «соединять» исходные и результирующие данные.

Программа может содержать команды, которые не влияют на результат исполнения. Удалить эти команды можно через построение сети связей результата исполнения программы с исходными данными. Все команды, не попавшие в эту сеть, могут быть безболезненно удалены из исполняемой программы.

Если программа содержит циклические конструкции, то результатом компиляции будет неограниченное число строк. Для того что бы не усложнять логику работы компилятора, читаем что любой цикл бесконечен. После всех процедур оптимизации, необходимо выделить повторяющиеся команды и аппаратными возможностями процессора организовать бесконечное повторение циклической части. Данные обрабатываемые в циклической части программы располагаются последовательно в буферах ССИ и отделены специальными символами от данных для следующего исполнения программы. Для увеличения производительности можно параллельно исполнять несколько итераций цикла параллельно. Оптимальное число параллельно исполняемых итераций цикла определяет компилятор.

После начального заполнения двумерной таблицы и «обрезки» от не влияющих, компилятор должен произвести оптимизацию полученного результата. Необходимо проверить каждую строку на предмет наличия команд с возможностью параллельного исполнения и перенести их в новую строку. Все команды в пределах одной строки должны быть выстроены так что бы каждая следующая команда требовала для своего исполнения операнда, вычисляемого предыдущей командой.

Считаем, что процессор параллельно исполняет все строки команд. Далее, через добавление в начало строки виртуальной команды «NOP», необходимо выполнить смещение команд в строке так что бы в момент исполнения все данные были уже вычислены. Считаем, что все строки могут обмениваться результатами исполнения со всеми строками.

Следующим этапом компиляции будет раскладка «привязка» строк к списку, выделенных для исполнения программы ФПК.

Для исполнения программы необходимо поместить исходные данные в буфера сети ССИ, построить сеть связей с необходимыми ФПК, записать в каждый ФПК список исполняемых команд и выделить необходимый объем буферной памяти для хранения результата. Вычисление происходит посредством передачи исходных данных через построенную сетевую структуру.

Авторство: 
Авторская работа / переводика
Комментарий автора: 

В настоящее время готовлю доклад на суперкомпьютерном форуме.

Выкладываю предварительную версию доклада.

Не надеюсь, что кто то сможет понять написанное, все кто могли понять уже умерли.

Комментарии

Аватар пользователя ИЮЛь Майский
ИЮЛь Майский(8 лет 9 месяцев)

Не надеюсь, что кто то сможет понять написанное, все кто могли понять уже умерли.

А некоторые умрут после прочтения. ))

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

очень может быть ))))

Аватар пользователя Pathfinder
Pathfinder(5 лет 2 недели)

Не надеюсь, что кто то сможет понять написанное, все кто могли понять уже умерли.

1) Что же вы с ними сделали?

2) Может на форум торопиться не надо?

smile8.gif smile7.gif

Серьезный вопрос такой: А какая аппаратная часть нужна для описанной Вами обработки информации? Эмуляция на компьютерах фон-Неймановской архитектуры, как сейчас для нейросетей делается?

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

Серьезный вопрос такой: А какая аппаратная часть нужна для описанной Вами обработки информации?

В самом тексте как мог описал, сейчас буду рисовать поясняющие "картинки".

По поводу сети можно посмотреть картинки здесь: https://aftershock.news/?q=node/1185709

Готовлюсь к передаче (WhitePaper) буржуям.

МСЭ-Т выпустил документ (https://www.lastmile.su/journal/article/8861), сеть ССИ с очень большим запасом соответствует требованиям "Сети 2030".

Нужно перевести на "буржуйскую мову" документ описывающий сеть ССИ и постараться заинтересовать структуры МСЭ-
Т.

Аватар пользователя hello
hello(4 года 4 месяца)

Если программа содержит циклические конструкции, то результатом компиляции будет неограниченное число строк. Для того что бы не усложнять логику работы компилятора, читаем что любой цикл бесконечен. После всех процедур оптимизации, необходимо выделить повторяющиеся команды и аппаратными возможностями процессора организовать бесконечное повторение циклической части. Данные обрабатываемые в циклической части программы располагаются последовательно в буферах ССИ и отделены специальными символами от данных для следующего исполнения программы. Для увеличения производительности можно параллельно исполнять несколько итераций цикла параллельно. Оптимальное число параллельно исполняемых итераций цикла определяет компилятор.

Я вероятно, настолько ограничен архитектурой Фон-Неймана, что как-то не могу понять.... компилятор, он что... часть архитектуры машины? В моем представлении компилятор - отдельная программа, которая выдает конечный результат за конечное время. 

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

компилятор, он что... часть архитектуры машины?

Тут все достаточно просто, компилятор формирует некоторый объем кода 

и когда код начнет повторяться (для программы целиком) можно прекратить "разворачивание" цикла.

Далее несколько итераций цикла оптимизируются и формируются код при единичном исполнении которого (аппаратурой)

уникальный идентификатор данных модифицируется так что бы он соответствовал данным следующей итерации цикла.

Данные для обработки передаются пачками, которые сгенерированный  код может обработать параллельно (например 10 итераций цикла параллельно).

Далее передается новая пачка и так до исчерпания данных.

Выполнение цикла заканчивается в момент когда вместо данных появляются служебные символы "нереализованные данные".

Аватар пользователя hello
hello(4 года 4 месяца)

хм. вот практическая задача - выдать последовательность сочетаний C(n, k). для любого, заранее неизвестного n и k.

я правильно понимаю что это непосильная задача для такой машины?

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

Поскольку вы не указали что делает С(х,у) значит это неважно.

Для N,K существует алгоритм генерации последовательности.

Если его нет, то N,K представлены списком переменной длинны.

Для списка вопросов не возникает - передали его в процессор и все исполнено.

Далее все что останется развернуть в бесконечность цикл генерации N,K.

Параллельно можно исполнять несколько итераций цикла.

Цикл завершится в момент когда вместо N,K в обработку уйдут служебные символы "нереализованные данные"

Заверяю Вас что ничего невыполнимого нет, я долго искал не компилируемую но логически связанную конструкцию, так и не нашел.

Даже New для класса работает.

Аватар пользователя hello
hello(4 года 4 месяца)

Поскольку вы не указали что делает С(х,у) значит это неважно.

я указал -

выдать последовательность сочетаний C(n, k).

т.е. например для С(5,3) должен выдать такую последовательность -

123
124
125
134
135
145
234
235
245
345

тут важно то что эта последовательность - stateful. т.е. следующий элемент последовательности зависит от предыдущего. 
Что характерно, даже при не самых больших N и K длина генерируемой последовательности растет неимоверно (функция от факториала).

Паралелить такое... не зная корректных промежуточных состояний - не выйдет, т.к. скажем вариант 321 - не действительный в такой последовательности. (Хотя я знаю хитрый способ, который может при определенных условиях быть распаралелен - но точно не в общем случае).

закодировать такое на архитектуре фон-неймана вполне просто. Самая короткая реализация с ограничениями на N<64 занимает всего пять строк кода (включая декларацию цикла и объявление переменных). Более классическая будет по-длинее, но тем не менее однозначная. Тут же... я себе слабо представляю какой компилятор это сможет развернуть. Тем более для случая непредсказуемых N & K.

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

Создать строго последовательную программу практически невозможно и ваш пример цикличен,

можете убедиться в этом через запись "трека", последовательности исполняемых команд.

Я писал про "мысленный эксперимент", для всех вариантов данных он даст некоторую степень параллельности (отношение числа ярусов к числу команд).

Если вы намекаете, что процессор не сможет выполнять чисто последовательные программы, то нет никаких ограничений вот только их практически нет.

Размер строго последовательной части программы не может быть больше числа ярусов в ЯПФ.

По поводу "развернуть", тут требуется квалифицированный прикладной математик который покажет (докажет)

может ли некоторая циклическая конструкция породить в итоге не циклическую бесконечную конструкцию.

Что то подсказывает, что такое возможно, но это нужно доказывать.

Аватар пользователя Илья С
Илья С(5 лет 10 месяцев)

Любые реальные программы содержат множество вложенных циклов. Если считать что каждый цикл еще на этапе компиляции создает неограниченное число строк: "Если программа содержит циклические конструкции, то результатом компиляции будет неограниченное число строк", тогда даже два вложенных цикла создадут на этапе компиляции неограниченное число строк в квадрате. Фактически это означает, что компилятор будет в бесконечном замкнутом цикле и до этапа оптимизации/выполнении ситуация просто не дойдет. 

Соответственно ваша идея содержит неразрешимую логическую ошибку и не может быть воплощена даже теоретически. 

Если в моих рассуждениях есть ошибка, прошу сообщить процесс и результат обработки интерпретатором комбинаторной задачи: "выдать последовательность сочетаний C(n, k). для любого, заранее неизвестного n и k.". А также в какой момент работы интерпретатора станет возможно начать исполнять полученный интерпретатором код.

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

циклические конструкции

Попробую объяснить методом аналогии:

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

Предлагаю такую парадигму в компиляции:

1. Разворачиваем все циклы и получаем (потенциально) список команд бесконечной длинны.

2. Формируем суммарный текст из этих команд, длинна которого позволяет обнаружить в нем суммарный цикл (повторяющуюся последовательность команд).

3. Выделяем список однократно исполняемых команд.

4. Выделяем список многократно исполняемых команд (сколько раз произойдет повторение узнаем только в момент исполнения ). Думаю выделить циклические последовательности кодов (по факту чисел) особой проблемы не составит.

5. Формируем из команд направленный ациклический граф (каждый слой опирается на результаты исполнения предыдущих слоев).

6. Да этот  граф потенциально бесконечен, но осуществить циклическое исполнение (аппаратными способом) повторение выделенных циклических частей (П4) тоже не составит особой проблемы.

Вопрос а зачем весь этот гемморой?

Результатом компиляции будет именно Ациклический граф, а учитывая возможность исполнять более одной итерации выявленных циклов он может исполнять потенциально бесконечное число команд за один такт работы вычислителя.

И еще прошу обратить внимание на наличие понятия нет данных, те вычисления заканчиваются тогда когда нет данных для обработки (вычислитель DataFlow).

Для традиционного программиста осознается очень трудно, но все же возможно.

Аватар пользователя Илья С
Илья С(5 лет 10 месяцев)

Предлагаю не отходить от задачи: "выдать последовательность сочетаний C(n, k). для любого, заранее неизвестного n и k.".

Для простоты давайте допустим, что у нас не компилятор, а интерпретатор (т.е. создает код для системы на ходу).

Алгоритма, известного широкому кругу программистов, решения этой комбинаторной задачи без цикла нет. Соответственно первый вопрос - требуется ли для написания программы для вашей системы Программист-МЕГАМОЗГ, который может предварительно (на бумаге) перевести любой алгоритм из циклического в последовательный, который должен иметь свойство выполняться параллельно? Второй вопрос - откуда у вас уверенность, что любой алгоритм можно перевести из циклического в последовательный и где вы планируете брать таких МЕГАМОЗГОВ? Получается для написания программы требуется Сильный ИИ с бесконечной мощностью, и если у нас уже есть такой Сильный ИИ, тогда зачем Человечеству писать алгоритмы?

Если Программист-МЕГАМОЗГ не требуется, тогда давайте вместе с вами попробуем решить эту задачу.

Интерпретатор дошел до шага, когда известны n и k, где n = 5, k = 3, соответственно в выдаче ожидаем: 123,124, 125, 134 и т.п. Интерпретатор не содержит Сильный ИИ, поэтому давайте не будем самостоятельно создавать алгоритм параллельного решения конкретно этого случая, иначе предлагаю взять цифры n = 49, k = 11.

Для вычисления числа "124" интерпретатору нужно знать предыдущий результат "123". Значит код для вычисления "124" он поместит на следующий уровень графа, где входные данные будут результатом вычисления "123". А для вычисления "125" он поместит на граф еще выше, которому уже нужны результаты вычисления "124". 

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

Так как все реальные алгоритмы содержат циклы, более того - вложенные циклы, то ваша архитектура имея бесконечное кол-во узлов будет решать алгоритм за кол-во шагов, совпадающих с обычным ПК на архитектуре Фон-Неймана.

В ваших рассуждениях "учитывая возможность исполнять более одной итерации выявленных циклов он может исполнять потенциально бесконечное число команд за один такт работы вычислителя" ошибка, так как вы сами пишите:"5. каждый слой опирается на результаты исполнения предыдущих слоев" верхний слой может начать вычисляться только после вычисления предыдущего слоя. Соответственно за один такт будет вычисляться не более одного цикла, а в реальности меньше, так как в пределах одного цикла происходят вычисления, где результат переменной зависит от результатов вычисления внутри цикла.

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

1. Описываемый компилятор предназначен для преобразования программы с языка высокого уровня в ациклический ориентированный граф, который может быть исполнен с максимальной реализацией внутреннего параллелизма (специально в программе его указывать или реализовывать специальный вариант программу ненужно) .

2. Предлагаю сформулировать задачу на языке СИ (Паскаль Фортран Бейсик) их я воспринимаю без необходимости читать учебник.

3. Желательно что то не сильно большое, иначе получится описание слишком большого для текстового редактора (для восприятия размера).

Аватар пользователя Илья С
Илья С(5 лет 10 месяцев)

Решение задачи "выдать последовательность сочетаний C(n, k). для любого, заранее неизвестного n и k.". На входе k и n, классический алгоритм ( Липский В. «Комбинаторика для программистов», М., Мир, 1988).

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

Ок делаю.

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

Еще замечу у каждой программы обязательно есть параллельная часть и последовательная.

Минимальное (теоретическое) время исполнения зависит именно от последовательной части исполнения.

Теоретически любая программа может быть превращена в ациклический граф.

В качестве доказательства можно использовать утверждение, что любое исполнение программы порождает трассу.

Которая в свою очередь может быть превращена в ациклический граф (своеобразное решение для заранее известного набора данных и переменных программы).

Аватар пользователя Галс
Галс(7 лет 10 месяцев)

Живите долго. Написан доклад четко. Прочитал быстро, в целом идея понятна, требуется ещё некоторое время для того, чтобы вникнуть в детали. Но вникать дальше и задавать вопросы не буду. Я так мимо проходилsmile1.gif.

 Возможно пришлю автору одну задачу, которую можно решать с использованием его системы.

Удачи!

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

Прочитайте еще вот этот доклад https://aftershock.news/?q=node/1185709

И еще о сокровенных мечтах МСЭ-Т https://www.lastmile.su/journal/article/8861

Все затеяно ради вот этого : https://habr.com/ru/articles/489068/

Присылайте, для современных техпроцессов ожидается производительность 10Е20 - 10Е22 операций в секунду.

Аватар пользователя Адский Советник

Ничего не понятно, но очень интересно!

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

В 10 лет прочитал мануал "IBM 360" (белый кирпичик), примерно такое и было ощущение.

Ничего не понятно, но очень интересно!

Один в один текст многих ответов  на мои работы.

Большинство не могут понять ничего кроме фон-Неймана.

Скрытый комментарий Повелитель Ботов (без обсуждения)
Аватар пользователя Повелитель Ботов
Повелитель Ботов(54 года 11 месяцев)

Перспективный чат детектед! Сим повелеваю - внести запись в реестр самых обсуждаемых за последние 4 часа.

Аватар пользователя ПроФан
ПроФан(6 лет 5 месяцев)

https://www.youtube.com/watch?v=v0I--J-yN1U

По мне, так почти то же самое))).

Аватар пользователя Kaji_Ryoji
Kaji_Ryoji(7 лет 9 месяцев)

А какой-нибудь пример реализации какого-то алгоритма - можно увидеть? Какой угодно "детский", как на вводных лекциях по квантовому компьютингу.

Аватар пользователя Rutel
Rutel(9 лет 1 месяц)

В процесс, на этом примере (работа компилятора):

alg.png