Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства.
© Балыбердин Андрей Леонидович Rutel@Mail.ru
DataFlow Архитектура процессора
(Введение, модель программирования)
Новосибирск, 2023 г.
Введение:
-
В предыдущем тексте (DataFlow_Компилятор с ЯВУ в ориентированный ациклический граф) показана возможность преобразования программы на языке высокого уровня в ярусно-параллельную форму, на каждом ярусе которой возможно параллельное исполнение всех команд в любом порядке.
-
Считаем что вершинами ациклического графа могут быть только команды исполняемые в рамках обычного процессорного АЛУ и хотя это и не так, но для простоты рассмотрения пусть будет.
-
Минимальное время исполнение программы, для случая с бесконечным числом АЛУ, равно числу ярусов умноженного на время исполнения команды плюс затраты времени на коммуникации.
-
Для объединения АЛУ в единую структуру используется сеть ССИ, которая является коммуникационной основой процессора и вычислительной системы в целом. ССИ позволяет произвольным образом соединять произвольное число АЛУ в рамках одного или нескольких кристаллов.
-
Современные достижения микроэлектроники позволяют получить производительность меж-кристального взаимодействия на уровне 100 ТБит в секунду (интерфейс с 4-6 соседями). Данной скорости хватит для работы универсального процессора средней производительностью в 5 триллионов операций в секунду (один символ данных на пять команд).
-
Для оценки числа АЛУ на один кристалл и суммарной производительности реализованного в рамках одного кремниевого кристалла процессора используем параметры современных микросхем GPU (16384 АЛУ с частотой 2.5ГГц, 200МБ памяти в виде FIFO и различных буферов). Пиковая производительность составит 40 триллионов операций в секунду.
-
Отдельные АЛУ процессора подключается в «разрыв» FIFO виртуального канала ССИ коммутатора. Процессор (совокупность ALU) забирает данные для обработки из FIFO приемника и помещает результаты обработки в FIFO передатчика сети ССИ. Число таких FIFO на одном кристалле может быть от ста тысяч тысяч до миллиона.
-
При компактной упаковке таких процессоров, 2 процессора на литр (кубический дм) в куб со стороной в один метр получаем производительность суперкомпьютера до 10E17 в секунду на кубический метр.
-
Для достижения цели (моделирование биологических структур) в 10Е20 операций в секунду потребуется куб со стороной около 10 метров. При таких размерах, среднее время передачи данных в пределах суперкомпьютера будет сопоставимо со временем доступа к локальной DDR.
Модель программирования:
-
Ярусная форма программы является направленным ациклическим графом, представлена вершинами графа и связями между ними. Каждая вершина представляет собой одну команду обрабатывающую входящие данные и генерирующую один результат (операция исполняемая модулем АЛУ).
-
Результат исполнения вершины используется для вычисления одной или нескольких вершин обязательно находящихся выше ярусом.
-
Результат исполнения программы, отдельное данное результата работы программы или любой промежуточный результат, зависят только от исходных данных и могут быть вычислены полностью независимо друг от друга.
-
Кроме отсутствия циклов, так же в явном виде отсутствуют и условные конструкции. При исполнении программы происходит вычисление всех альтернативных веток одновременно (аналог спекулятивного вычисления в современных процессорах), с последующим выбором одного или нескольких «правильных» результатов (эффективнее запретить исполнение не реализующихся веток алгоритма).
-
Все команды программы исполняются в момент готовности данных (базовый принцип DataFlow вычислителя). Отличием от канонического DataFlow является наличие дополнительного состояния данных «не реализованные данные», являются результатами не реализованных веток алгоритма. Такие данные создаются в моменты работы конструкций заменяющих условные переходы в традиционных вычислительных архитектурах. По смыслу такие данные соответствуют утверждению, что данных не просто еще нет, но и никогда не будет для текущего набора исходных данных. Это тип данных позволит АЛУ не исполнять вершины (команды), результаты исполнения которых в дальнейшем не будут принимать участие в формировании результатов работы программы в целом, соответственно не будет расходоваться лишняя энергия.
-
Вся программа может быть представлена несколькими большими «треугольниками». Основание «треугольника» это исходные данные, вершина одно результирующее данное, их можно выполнять независимо друг от друга. Тело «треугольника» представляет собой как бы большую команду команду виртуального АЛУ преобразующую исходные данные программы в результат за один такт и без промежуточных данных. Число больших «треугольников» равно числу результирующих данных.
-
Поскольку в реальности такого виртуального АЛУ нет, а программа представляет собой ациклический граф состоящий их отдельных «треугольников» команд АЛУ, то можно сказать что большой «треугольник» состоит из большого числа соединенных между собой маленьких «треугольников» команд реального АЛУ.
-
Число реальных физических АЛУ достаточно велико, но все же может быть меньше чем число вершин в графе программы. Решать эту проблему можно двумя путями.
-
Первый способ: Разбить программу на множество «треугольников» меньшего размера и выполнить их последовательно. С запоминанием результатов исполнения каждого как промежуточных данных.
-
Второй способ: Объединить маленькие «треугольники» (команды АЛУ) в конструкции побольше и исполнять их как обычные линейные последовательные куски кода. В реальности можно использовать оба способа одновременно.
-
-
Кроме того возможна реализация совокупности «треугольников» с использованием любых аппаратных средств. В качестве примера можно привести различные аппаратные кодеки.
-
Разбиение «большого треугольника» на меньшие может породить пересечение «треугольников», а это одинаковые промежуточные данные и повторное вычисление уже вычисленных результатов в разных частях программы. Решение о повторном вычислении или передачи готовых данных принимается после учета времени на передачу. В случае если повторное вычисление тратит времени и энергии меньше чем передача этих промежуточных данных, то повторно вычисляем, если нет то передаем.
-
Программа исполняемая в DataFlow вычислителе, представляет собой совокупность данных хранимых в памяти, списка команд хранимых в АЛУ и сети виртуальных каналов ССИ.
-
Для вычисления необходимо передать данных из памяти в соответствующие виртуальные каналы сети ССИ и записать результаты в память. Иными словами, Вычисление результата это передача набора данных по заранее сформированной сети виртуальных каналов, с последующим приемом и сохранением в память результатов исполнения.
Комментарии
Разрядность ALU и FIFO?
Если исходной программой является текст на языке Си, то разрядность берется оттуда.
А вообще:
Фиксированной разрядности нет (хочу полностью избавиться от понятия разрядность, адрес в памяти и тд)
Пока этот вопрос в процессе проработки.
АЛУ за один такт обрабатывает заданное разработчиком число разрядов (например 100 бит).
Если переменная содержит меньше 100 бит, то АЛУ автоматически урезает размер, если больше то происходит добавление из следующего символа.
Если обрабатывается например массив одинаковых элементов, то несколько символов содержат "упакованные" данные (без не используемых промежутков).
Собираюсь удалить понятие: Число с плавающей запятой - оно является источником не точности вычислений.
Прямо у вычислительную систему интегрировать контроль за точностью вычислений (например если задается вычисление с точностью 0.1% то результат будет гарантированно иметь число разрядов достаточных для точности 0.1%).
Вы когда-нибудь проектировали ALU?
только в учебных целях.
В следующих статьях я подробно опишу структуру АЛУ в форме достаточной для преобразования а Verilog.
Следующая статья будет посвящена интерфейсу с оперативной (в целом любой) памятью.
Понимаю Ваше "непонимание" и скепсис.
Со своей стороны могу сказать, что проектируемая мной вычислительная система будет настолько новой, что все современные знания о вычислительной технике придется отправить в "корзину".
Вы уже видели описание телекоммуникационной составляющей вычислительной системы : В нашей стране пока не нашлось ни одного ученого, который бы смог понять как она работает и потенциал скрытый в этих простых алгоритмах.
Все что я в итоге слышу: "Данная область знаний не входит в круг моих научных интересов".
И иногда пишут : Да это ISDN (АТМ,SDH ... ) или просто тут ничего нового нет (голословное утверждение без указание а где есть похожее старое), но на просьбу обосновать свое заключение "выходят из себя" и прекращают общение.
Наука под названием "Телекоммуникации" в нашей стране мертва, остались только инженеры и научные бюрократы не имеющие своего собственного мнения.
Проектируемая вычислительная парадигма является родной для человеческого мозга.
Как вы наивны 😀
Слышали что-нибудь о Stream processing и Stream programming?
А почему Вы решили что здесь именно поток, кто мне мешает в одно FIFO поместить один символ.
Если говорить про сеть ССИ, то там "всю дорогу" именно про разделение общего ресурса (канала) на отдельные не зависящие и не влияющие друг на друга составляющие. И самый по факту тоже самое : поместить отдельные параллельные данные в суммарный поток, который будет аппаратно разобран на отдельные данные. Непосредственно ядро АЛУ работает с отдельными данными.
Иными словами : в DataFlow все заточено на параллельность, а видимая последовательность это скорее иллюзия и вызваная просто ограниченным числом физических каналов.
Логически вычисление происходит как одномоментное преобразование всех данных задачи во все данные результата без создания и зранения промежуточных результатов.
DataFlow и Stream Processing - это синонимы (в вашем случае)
Ни разу - на уровне АЛУ потока нет.
Логически каждое АЛУ исполняет всего одну команду над одним набором данных.
Можно сказать, что код операции записанный в АЛУ это тоже данные.
Второй раз вычисление происходит только после перезапуска программы для обработки уже другого набора данных.
Видимость потока команд возникает просто из-за малого числа физических АЛУ, каждое физическое АЛУ "притворяется" большим числом логических АЛУ.
DataFlow - это направленный граф, т.е. поток 😀
Скорее нет.
Правильнее так :
В начальный момент это граф имеющий "начальные" вершины содержащие исходные данные.
Примерно как команда создающая одну константу и передающую ее вершинам графа.
Процесс вычисления заканчивается, когда каждая вершина графа выполнила по одной команде (перед эти получив исходные данные)
и Эти данные записались в "конечные" вершины.
Замечу : В отличии от фон-Неймана направленный граф гарантированно завершает исполнение за точно известное число тактов (если считать что одна команда один такт). Время исполнения обычной программа предсказать невозможно, да и вообще нельзя сказать выполнится она хоть когда то (это фундаментальная проблема современного программирования).
Никоим образом не касаюсь самой Вашей архитектуры, так как недостаточно компетентен, позволю себе уточняющий вопрос вот о чем:
- где и кем была выявлена и каким образом доказана "вычислительная парадигма человеческого мозга"? Есть формальное определение или хотя бы феноменологическое описание этой парадигмы?
А то я нейробиологов и нейросетевых программистов слушаю-слушаю, а общего взгляда на эту парадигму все никак у них не родится. Ну а раз Вы утверждаете, что Ваш проект использует "родную" для мозга парадигму, значит, Вам она известна и есть какие-то обоснования, что она для человеческого мозга "родная".
Вот и хотелось бы узнать поподробнее об этом.
Сейчас никто не знает что из себя представляет мозг с вычислительной точки зрения.
Утверждение, что это нейронные сети звучит также примитивно как и то что современные процессоры состоят из "транзисторных сетей".
Пока это мое утверждение (гипотеза) и я ее буду постепенно доказывать.
Если я не ошибся в последовательности алгоритмов, финальным доказательством будет демонстрация работы сильного ИИ.
Ну и переносом моей любимой (собственной) личности в вычислительную машину. ))))
Что ж, удачи Вам.
В рамках флуда - а на кой Вам личность в ЭВМ? Она отдельная будет, бессмертия это не прибавит...
А вот здесь Вы не правы.
Переход должен происходить постепенно.
Сначала я "расширю" свой мозг цифровой составляющей и обеспечу их совместное функционирование.
Далее за счет процесса нейро-пластичности и постепенной гибели биологических нейронов (от старости и водки),
начнется процесс переноса личности в компьютер.
https://habr.com/ru/post/489068/
"Мягкий" переход? Знакомая концепция. Лет двадцать по ней почитываю всякие мнения.
Очень много проблем на этом пути. В частности, раз неизвестна парадигма, на которой работает мозг - невозможно спроектировать межсистемный интерфейс. Нейропластичность у нейронов есть, а у электронных (да даже и фотонных) вычислительных элементов - нет, так что сознание, перемещаясь на новый носитель, может необратимо деформироваться из-за искажений когнитивных процессов. Притом искажений, которые мы сейчас не то что просчитать - даже предположить пока не умеем.
Опять же, личность - это не только набор данных, но и набор реакций, в частности - эмоциональных. Как будет моделироваться эмоциональная компонента личности, если на сегодняшний момент структура эмоциональной сферы человека изучена едва-едва? Что гормоны на нее влияют, знаем, а в каких пропорциях, через какие узлы, и все ли гормоны нам известны - не знаем.
С другой стороны, реализация личности в бытии подразумевает и межличностное взаимодействие, и объектное манипулирование. Чтобы обеспечить своей цифровой версии все это, Вам придется и задачи сложного звукосинтеза решать (чтобы эмоции передавать на голосе - не будете же Вы со всеми чисто текстом общаться?), и робота-носителя делать, который будет способен перемещаться сам и манипулировать объектами.
Иначе личность окажется "заперта в кремниевой банке", что может ее разрушить.
В общем, много проблем. Но - повторюсь - удачи Вам!
Вот и нужно все эти проблемы решать.
Можно еще одним путем идти :
Вырастить свой клон с отключенным мозгом и уже туда "мигрировать".
(понятное дело после его активации).
Биологи четко убеждены, что вариант с клоном невозможен.
Процессы мозга, составляющие личность и сознание, основаны на его структуре. А она формируется жизненным опытом. Вы не сможете скопировать структуру с точностью до нейрона, это раз, и возникшее у клона сознание будет его сознанием, а не Вашим, потому что до сих пор не существует убедительных свидетельств о том, что сознание способно отделяться от носителя. Религиозные тексты, надеюсь, в качестве контраргумента приводить не станете? :)
я и не говорю копировать, именно совместное существование исходного мозга и мозга клона должно перенести личность в клон.
В качестве контраргументов приведу биологию :
Мозг человека состоит из двух половинок и вроде никто не считает что это два отдельных сознания.
При этом можно одну половинку мозга уничтожить, но личность сохраняется : https://www.techinsider.ru/science/577774-chto-budet-s-chelovekom-esli-emu-amputirovat-polovinu-mozga/
Весь вопрос в качестве межсоединений (связи) между мозгом клона и мозгом исходной личности.
И да личность при переносе немного изменится, человек постоянно меняется.
Даже если человеку просто сказать, что он сможет жить почти вечно, то он почти сразу изменится.
Тогда закономерен вопрос: каким образом Ваш мозг будет переносить свою структуру на "чистый носитель" клона? Причем, "чистым" он не будет, если только не выращивать клона тотально в банке в виде мозга без сенсоров.
Ну вот отсоединили Вы половину (кстати, а как определять, где точка соединения? По хиазме резать? Были такие опыты, ничего хорошего не показали), и даже подсоединили вторую - Вы правда думаете, что она будет отформатирована так, как отсоединенная?
Механизмы формирования нейронных связей - великая тайна нейробиологии на сегодняшний день. Известно, что они есть, но как они работают в привязке к сенсорному и когнитивному воздействию - не знает никто.
Так что, повторюсь, удачи Вам с электронным вариантом :) в нем куда меньше видимых сложностей на сегодняшний день, чем в миграции сознания на клонированный носитель. В варианте с электроникой мы хотя бы электронную компоненту знаем неплохо, уже плюс.
Все что я говорю чисто умозрительно и пока все это фантастика.
По интерфейсу (как вариант) создать молекулу которая будет за счет свой химической структуры прикрепляться в сенсорных участках нейрона.
Которая при возбуждении нейрона будет излучать сигнал, который можно будет принять внешним по отношению к мозгу оборудование.
Если наоборот подать сигнал, то эта молекула подаст на сенсорный участок воздействие.
Начитать все это нужно с нервной системы управляющей телом (там нервных волокон мало и они не сильно скучены).
На начальных этапах как интерфейс к протезам. Далее как интерфейс к системе виртуальной реальности и тд.
Эх. Давно мечтаю третью руку прикрутить и освоить. Только не видал таких программ, а те, что ведутся - инвалидам нужнее.
Эту идею хорошо рассмотрел Станислав Лем в Осмотре на месте. Бессмертные эктоки там именно так бессмертия и достигали. Постепенным замещением. 1982 год...
Разрядность FIFO вообще никак не связано с разрядностью данных - это просто порции передачи данных.
Будет отдельная статья про преобразование данных в поток символов и обратно.
В DataFlow нет понятия адреса, переменная имеет уникальный идентификатор и все.
Еще раз - разрядность FIFO?
сейчас в тестовом устройстве для студентов будут использоваться слова размером в 104 бита,
старшие биты (минимум 2 бита) используются для идентификации типа данных.
остается 102 бита (от них нужно минусовать биты управляющей разрядностью).
Предварительно могу сказать, что за один такт в АЛУ для обработки может быть передано 100 Бит.
А как они будут интерпретироваться (100 однобитовых переменных или одна 100 битовая) зависит от логики работы самого АЛУ.
1. разрядность FIFO (3я попытка)?
2. как обосновано значение 100 для ширины слова/ALU?
3. чем определяется тип операции, выполняемой ALU на текущем такте?
104 бита
Никак, просто исходя из возможности обрабатывать одно слово данных FIFO за такт.
А само число появилось из соотношения битовой скорости потока данных в оптическом волокне к тактовой частоте ядра коммутатора.
Кратность 8 битам появилась из-за таковой в готовых серилизаторах-десерилизаторах (конкретно для 100 МБит сети в тестовой плате для студентов).
кодом (одним или нескольким) записанным в качестве команды в прямо в АЛУ.
Коды последовательно передаются такими же каналами передачи данных.
При исполнении команды, код "уничтожается".
Боле детально будет в описании работы DataFlow процессора.
эх
вот кусочек реального железа, спроектированного 20 лет назад
технология 130nm
реализация DataFlow на 99% осуществляется компилятором
компилятор разрабатывался 25 лет, железо 2 года
Это VLIW, принципиально другая технология.
Если говорить о похожих вещах, то нужно приводить в качестве примеров технологию транспьютеров.
Это много ближе ближе, но к сожалению тоже не жизнеспособно и не универсально, как минимум из-за отсутствия самостоятельной сетевой парадигмы.
Ни одна из чистых DataFlow архитектур не жизнеспособна. Это следует из природы обрабатываемых данных.
А насчет VLIW - любая реконфигурируемая под параллельные данные архитектура является VLIW. А ваша - так вообще VVVLIW 😀
Все тексты написаны знаками )))
И обычный фон-Нейман это VLIW, но только с одной командой в слове.
А вообще любая технология это множество различных алгоритмов, физических законов, связанных в определенном порядке и подчиняющихся определенному набору правил и компромиссов. Новая технология далеко не всегда состоит из только новых элементов.
Перспективный чат детектед! Сим повелеваю - внести запись в реестр самых обсуждаемых за последние 4 часа.
Распознавание образов есть сверхупаковка (свёртка) информации.
Главное в данной теме - правильно представить данные и результат интерпретировать верно.
А для этого - правильно представить цель и задачу (без излишней универсальности) на базе существующих технологий (только не ИИ, упаси Боже!).
Задача поставлена правильно, а цель типа неопределённая - без конкретики...
Если цель - ИИ - то всё это суета. Если цель - Душа - то шаг к её познанию.
Вы уж определитесь.
Без ИИ невозможно создать интерфейс в мозг (за разумное время)
Интерфейс будет делаться мозгом - он типа уже сделан человеком под видом HMI
В мозг, да через ИИ - ну представьте себе задачу - воткнув датчики в нефтепроводы получить информацию о ценах на нефть на биржах
ИИ нужен для решения задач молекулярного проектирования.
Иными словами ИИ нужен для взламывания тайн молекулярного устройства нашего организма.
А вот без ИИ - анализ и подтверждение факта существования Души - с помощью таких средств - вполне можно шаг вперёд сделать.
ИИ - тупиковый путь. Это инструмент - экспертные системы и их развитие - это и есть Интеллект.
Chat GPT тому свидетель. Разум - типа немного другое понятие, вовсе не равное интеллекту.
Чат ЖПТ никакого отношения к ИИ не имеет - это система дополнительной обработки поисковой выдачи.
Как раз - подтверждает ложность посыла темы ИИ.
Назвали самообучающиеся экспертные системы громким именем ИИ - хлебайте полной ложкой результаты. Дополнительная это ИИ или основная - без разницы
Ну у нас есть бетон с нано добавками ))))
Тема хайповая с самого начала вот и проблемы.
Можете прокомментировать эту статью? https://habr.com/ru/post/718782/
Прочитал.
По поводу "шовинизма", это обязательное свойство человеческой личности проявляемое даже к существа почти не отличимых от личности его проявляющей, просто живущей по другую сторону горы и или в сотне метров за номинальной чертой на местности.
Про современные нейронные сети и чат ЖПТ в частности, не считаю их ИИ, это адаптивный фильтр выделяющий из входного потока свойство на которое он был "натаскан" (ChatGPT — большая языковая модель, для тренировки которой использовались методы обучения с учителем и обучения с подкреплением.).
Эта языковая модель реальзована внутри нейросети Генеративный ... Трансформер (GPT).
Но модели могут быть любыми. Из второй статьи этого пользователя:
Еще
И в конце опять
А вы не считаете, что когда мы наделяем сознанием себя, но отказываем в этом более простым животным - это и есть некоторый шовенизм? Про нейросети я вообще молчу - у них модель, а у нас типа нет.
принципиальной разницы между мозгом человеком и мозгом животных нет.
Датафло может быть структурированным или неструктурированным. В первом случае вы рано или поздно прийдете к тому что уже есть в компьютерной технологии. Во втором случае вы прийдете к аналоговым ЭВМ. Но. В сегодняшнем мире это выглядит немного иначе. Если допустить что существует самоподстраивающиеся под задачу( датафло ) фпга вы получите нецифро-неаналоговую машину. Но. С логикой. Тогда возникнет вопрос - существует ли логика нечеловеческая?
В данном случае структурированием, раскладыванием в удобном для вычисления порядке занимается сеть ССИ.
если Вы намекаете на векторные вычислители, то скорее нет
получается что да, структура, сеть ССИ подстраивается под конкретную задачу