Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства.
© Балыбердин Андрей Леонидович Rutel@Mail.ru
DataFlow Архитектура процессора
(Концепция использования оперативной памяти)
Новосибирск, 2023 г.
Введение
Для современных процессоров, построенных с использованием архитектуры фон-Неймана, память является неотъемлемой частью. Используется на всех уровнях системы от адресации исполняемой команды до выбора используемых для вычисления данных.
DataFlow архитектура, многократно более низкоуровневая концепция, не содержит ничего кроме линий связи (ребер графа) и «обработчиков» (вершин графа). Состояния линий связи представляют собой конечный список дискретных вариантов. «Обработчик» преобразует конкретный набор состояний на входе в некоторое состояние на выходе. В теории, программа представлена в виде ациклического графа, «обработчик» срабатывает ровно один раз за все время работы программы. Никаких упоминаний о памяти, адресации нет вообще ни в каком виде. С программной точки зрения DataFlow памяти не содержит.
Концепция функционирования DataFlow вычислителя
Программа для DataFlow представляет собой направленный ациклический граф, который преобразует данные на входе в результат вычислений на выходе. Результаты вычисления принципиально ничем не отличается от исходных данных, так же могут быть поданы на вход следующего ациклического графа и так до бесконечности.
В теории получаем никогда не заканчивающийся процесс обработки данных. Для того что бы такая вычислительная система имела практический смысл, необходимо в различных частях графа добавлять к уже существующим, данные полученные от датчиков (сенсоров) расположенных в реальном физическом мире и передавать некоторые результаты вычислений устройствам воздействующим на объекты в реальном физическом мире.
Теоретическое представление архитектуры DataFlow
Формально DataFlow вычислительную систему можно представить как набор исходных данных (вершин не имеющих входов, значение выхода которых задается на этапе производства), вершин имеющих входы и выходы, сети связи объединяющих все вершины. Для связи с внешним миром есть некоторое число интерфейсов в физический мир подключаемых в различных частях графа. Как только произойдет срабатывание всех «обработчиков» ациклического графа, задача решаемая данным вычислителем является завершенной (родился-жил-умер).
Практическая реализация универсальной архитектуры DataFlow
С практической точки зрения аппаратная реализация всего графа целиком не имеет смысла. Поскольку узлы сети срабатывают только один раз в момент прихода данных, то всю сеть можно разбить на три части:
-
Первая часть: Уже сработавшие узлы (прошлое)
-
Вторая часть: Еще не сработавшие узлы (будущее)
-
Третья часть: Изменяющие свое состояние (настоящее).
Узлы находящиеся в состоянии «прошлое» уже не представляют интереса для решения задачи, граф ациклический, каждый узел «срабатывает только один раз» и может быть отброшен после использования результатов другими узлами. Для узлов находящихся в состоянии «будущее» еще нет данных и вычислить их пока невозможно.
Узлов находящихся в состоянии «настоящее» многократно меньше чем всех остальных и именно они должны быть представлены (назначены, загружены) в виде реальной физического устройства с возможностью выполнения вычислений. После «исполнения» узел переходит в состояние прошлое и может быть отброшен или заменен новым узлом перешедшим в состояние «настоящее».
Наиболее близкой визуализацией вычислительного процесса будет движение детонационной волны, где реакция происходит в крайне тонком слое вещества.
В момент появления новых данных происходит переход некоторых узлов графа из состояние «будущее» в состояние «настоящее», а для этого необходимо выполнить четыре действия:
-
Переместить все необходимые данные в места преобразования обработчиком (из места промежуточного хранения к буферу локального АЛУ) эту функцию исполняет сеть ССИ.
-
Добавить описание конкретного «обработчика» (Код исполняемой операции из памяти описания графа).
-
Передать полученную совокупность данных в «АЛУ», которое преобразует их в новое данное и цикл повторится.
Использование традиционной памяти в DataFlow
В данной вычислительной парадигме, память можно считать специфическим «обработчиком», который не изменяя значения данных, осуществляет их перенос во времени из «настоящего» в «будущее». Каждую ячейку памяти можно считать аналогом линии задержки из электронной аппаратуры.
Хотя физическая реализация всего графа не имеет смысла, но есть необходимость хранить его цифровое описание, из которого происходит копирование кодов исполняемых обработчиком операций, необходимых для перехода вершин графа из «будущего» состояния в «настоящее» в момент появления данных на соответствующих ребрах графа.
Замечу, что описание сети может храниться не только в виде прямого описания графа, но и в упакованном виде.
Программу на языке высокого уровня можно считать упакованным видом ациклического графа, для вычисления с использованием одного физического «вычислителя» (АЛУ).
Параметры подсистемы оперативной памяти
В DataFlow память может использоваться как для промежуточного хранения обрабатываемых данных, так и для хранения ациклического графа (программы). Производительность DataFlow вычислительной системы прямо зависит от возможности выполнять одновременное преобразование всех доступных для параллельной обработки данных. Максимальное число таких одновременных данных ограничивается числом АЛУ (модулей обработки). Для сбалансированной работы DataFlow процессора необходимо максимально полно удовлетворять потребность в данных со стороны всех АЛУ, во всех кристаллах.
Передача кодов команд:
-
Предположим что имеется 16384 отдельных АЛУ с частотой тактирования 4ГГц (взято из параметров существующих GPU), что означает предельную производительность канала считывания команд из памяти 65535 миллиардов команд в секунду (считаем что граф ацикличен и команда исполняется один раз). Уменьшать число отдельных АЛУ нельзя, это повлечет за собой уменьшение производительности системы.
-
Если каждая команда (код плюс два идентификатора операнда) занимают 48 бит, то требуемая производительность подсистемы памяти составляет примерно 3.2Е15 бит в секунду. Получаемая в рамках одной микросхемы пиковая производительность составит 65.5 триллионов операций в секунду (65.5Е12 оп/сек).
-
Реальной технологии для передачи извне отдельной микросхеме 3200 ТБит в секунду нет, остается поместить небольшой объем памяти непосредственно в микросхему и обеспечить максимально возможный темп ее обновления (в обычных процессорах кэш).
-
Плюсом ациклического графа является последовательный характер операций чтения, нет ветвлений с обрывом линейных цепочек команд.
-
Из имеющихся технологий ориентированных на исполнение в виде чиплета можно выделить HBM3, которая имеет производительность интерфейса в 6.4 Гбит/сек на один контакт при числе контактов данных 1024 с возможностью использования до 4 параллельных устройств. Получаем максимальную производительность 26 Тбит в секунду, что составляет около одного процента от требуемой.
-
Получается, что даже HBM3 нельзя рассматривать как непосредственный источник исполняемых команд, а только как способ обновлять (загружать) небольшую локальную память. Из опыта проектирования современных процессоров можно сказать, что объем такой памяти может быть в районе 4-8 тысяч слов на один модуль. Если объем становится больше, то она не сможет выдавать по одному слову за такт.
-
Современные процессоры имеют суммарную кэш-память объемом в 64 Мбайт, что позволяет создать локальную память размером в 682 команды (48 бит) для каждого из АЛУ.
-
При проектировании вычислительной части процессора необходимо учитывать что DataFlow показывает максимальную эффективность только при большом числе параллельно выполняемых команд, каждое АЛУ выполняет небольшое число команд, но они все задействованы параллельно. Получается иметь слишком большой размер единой локальной памяти команд не выгодно, во многих случаях она не будет задействована при вычислениях.
-
Для увеличения производительности DataFlow компьютера выгодно иметь большое число отдельных процессоров, каждый из которых исполняет небольшое число слоев (1-2 команды на слой) ациклического графа. При такой стратегии время загрузки программы из внешней памяти (HBM3) распараллеливается на все модули памяти всех отдельных процессорных элементов, составляющих распределенную вычислительную систему. Для компьютера состоящего из 128 отдельных физических процессорных элементов ограничение пропускной способности при решении одной конкретной задачи перестанет действовать, она будет решена за минимально возможное время.
-
Да, каждый отдельный процессор будет загружен на 1% от свой производительности, но и потреблять будет тоже существенно меньше и проблем с охлаждением тоже нет. Примерно по такому принципу работает биологический мозг человека.
-
Для использования оставшихся 99% производительности, можно разбить ациклический граф на составляющие полностью помещающиеся в кэш-память и выполнять их по отдельности. Такой подход будет иметь приемлемую эффективность только если объем обрабатываемых данных на каждом этапе очень большой, время его обработки многократно превышает время требуемое на перезапись содержимого в кэш-памяти или часто решаемая задача полностью поместилась в кэш-память.
-
Скорее всего будут использоваться оба варианта одновременно. Для такой вычислительной системы оптимальным будут крайне малые размеры отдельных страниц кэш памяти (с возможностью слияния соседних), при большом числе таких страниц на каждое физическое АЛУ. Оптимально, что бы размер блока кэш-памяти был равный размеру одного слова HBM3 (1024 бит). Такой размер позволит производить загрузку страницы кэш-памяти кодами команд за время одного такта. Все страницы кэш-памяти могут быть перезагружены за примерно за 1.5 мкс, такая перезагрузка эквивалентна смене «контекста» в обычном процессоре.
Передача данных для обработки:
-
Для получения максимальной производительности кроме большого числа быстрых АЛУ требуется доставить данные для обработки. Для оценки требований к системе передачи данных будем считать, что в среднем на каждые 5 сработавших вершин графа требуется одно 100 битовое слово данных. Считаем что число результирующих данных равно числу исходных (типично для задач физического моделирования).
-
Обрабатываемые данные не принадлежат какому то отдельному процессору DataFlow вычислителя. Кроме того нужно учесть что локальная память процессорного элемента и так перегружена потоком команд.
-
Исходные данные преимущественно находятся в основании пирамиды ациклического графа. Если суммарный процессор представляет собой куб с связями ближайших процессорных элементов (6 дуплексных каналов связи по 16ТБит/сек), то память данных оптимальнее всего расположить на «гранях» этого куба.
-
Суммарной производительности четырех HBM3 в 26ТБит/сек хватит для полной загрузки одного канала (16ТБит/сек).
-
Для слова данных размером 100 бит, получаем производительность канала передачи данных 160Е9 слов в секунду, а для их обработки «на лету» требуется выполнить примерно 1Е12 элементарных операций. Учитываем что граней у куба шесть, а значит и требуемую производительность нужно увеличить в 6 раз. Даже при потребности в 6Е12 операций в секунду пиковой производительности отдельного процессорного элемента в 65Е12 хватает для обработки данных «на лету». Можно сказать, что производительность процессорного элемента позволяет без задержек выполнять обработку данных даже для самых тяжелых задач, где приходится одна команда на одно обрабатываемое данное.
-
Доставку и распределение данных по локальным АЛУ осуществляет сеть ССИ, которая по своей природе является синхронной и оптимальна для больших синхронных потоков.
-
Если оценивать максимальный поток обрабатываемых данных (куб из 1000 процессоров с шагом 100мм), то данные будут обрабатываться со скоростью 10E14 слов в секунду (10E16 бит в секунду). Задержка передачи данных между соседними процессорными элементами (расстояние 100 мм) будет на уровне до 5 нс. Данная задержка будет вноситься между относительно небольшим числом уровней (слоев) ациклического графа задачи целиком, а не между отдельными командами. Для того что бы представить влияние задержки на каждую отдельную команду отдельного процессорного элемента, нужно 5 нс разделить на число АЛУ процессорного элемента (16384).
Итог
Для DataFlow память представляет собой не более чем сервисный инструмент, позволяющий реализовывать в физическом виде только исполняемые в данный момент узлы графа их относительно немного, что сильно уменьшает физической электронной схемы. Например FPGA, даже если ячейка не изменяет своего состояния и не обрабатывает данных, но ее все равно приходится держать в виде «кремниевой» электронной схемы на кристалле.
Размер число одновременно используемых физически существующих «вычислителей» и никак не учитывается непосредственно в процессе программирования. На финальном этапе компилятор производит преобразование структуры графа под имеющееся аппаратные ресурсы и только в этот момент появляется понятие «физическая память», число имеющихся АЛУ и структура сети передачи данных.
При этом производительность вычислительной системы критично зависит от ширины слова и возможности оперативной памяти выдавать и принимать большие линейные последовательности таких слов.
Особенностью представления программы в виде ярусной формы является сравнительно небольшое число «ярусов» при очень большой их ширине (число параллельных инструкций), что позволяет получать высокую скорость решение задачи даже при сравнительно невысокой производительности отдельных физических «вычислителей». Происходит умножение скорости отдельного физического «вычислителя» на число параллельных ему.
«Расплатой» за уменьшение числа физических вычислителей будет увеличение времени решения задачи.
Большое число вычислителей вызывает потребность в больших потоках команд и данных для обработки, как следствие большие требования к системе памяти. .
На заре электроники было затруднительно создавать много отдельных «вычислителей» (АЛУ, процессоров) и сети связи между ними, поэтому предпочтение было отдано архитектуре фон-Неймана с единственным вычислителем (АЛУ). В настоящее время такой проблемы нет, зато в полной мере проявилась невозможность эффективного распараллеливания последовательных вычислений.
Новая DataFlow архитектура позволит сразу (с использованием имеющегося техпроцесса) увеличить реальную производительность универсальных вычислительных систем на три-четыре порядка и повысить КПД использования пиковой производительности отдельных процессорных элементов.
Комментарии
Мне кажется, сейчас все самое интересное на видекартах гоняют. Языковые модели, например. То-есть это уже не универсальные вычислительные системы, они и так оптимизированы. Хотя, если взять процесс их обучения то там все плохо и медленно.
Видео карты это специализированные вычислительные системы (далеко не универсальные), хорошо работают только для тех задач где одну большую можно разбить на много слабо связанных с числом исполняемых команд на одно данное от 1000.