Когда закон Мура «уже не тянет», мастера разработки микросхем из Intel отбрасывают существующие архитектуры. Чтобы достичь эксафлопсных мощностей, они придумали новую архитектуру, которая одним махом может сделать концепцию обычного процессора устаревшей. Она на голову опережает процессоры X86 по темпам.
Новая архитектура, о которой давно мечтали компьютерные инженеры, называется «конфигурируемый пространственный акселератор» (CSA, Configurable Spatial Accelerator). Но называть его акселератором (ускорителем) по меньшей мере не очень точно. То, что придумали разработчики, — это скорее методика создания процессоров или сопроцессоров, которые будут «воистину машинами потоков данных». Они не будут, как это было раньше, просто последовательно обрабатывать данные, они не будут векторными сопроцессорами. Они смогут работать непосредственно на графах, создаваемых программно, без их компиляции в процессорный код.
Подход CSA немного похож на то, как если бы у нас был коммутатор ASIC и он бы «перекрёстно опылялся» с математическим сопроцессором. Может быть, в новых компьютерах будет дополнительно сопроцессор x86, для того, чтобы поддерживать программы, работающие на архитектуре «из прошлого».
Концепция машины потока данных не нова. Современные коммутационные микросхемы работают похожим образом, и это позволяет их в некоторой степени программировать. Иначе они были бы просто статическими устройствами, на высокой скорости обменивающимися пакетами данных.
Многие идеи, которые Intel использовал для создания CSA, воплощены в модулях обработки аналитики компании Graphcore. Но важно то, что Intel своей последней разработкой (CSA) кладёт конец архитектуре X86, оставляя от неё только основные концепции, такие как управление потоками данных. Он отходит от строгой архитектуры фон Неймана ради обеспечения больших скоростей обработки данных. Термин CSA можно было бы использовать как название этого нового подхода к обработке данных. Возможно, Xeon в скором времени будет рассматриваться не как основной процессор, а как сопроцессор.
Основную идею CSA легко изложить на бумаге, но сложно реализовать с помощью компиляторов, даже несмотря на то, что концепция открывает почти бесконечные горизонты для создания широкого спектра вычислительных машин для всех типов рабочих нагрузок.
Когда осенью прошлого года контракт на предшественника эксафлопсных процессоров суперкомпьютер Aurora, разрабатываемый в Аргоннской национальной лаборатории (Argonne National Laboratory), для которой Intel является главным подрядчиком, был пересмотрен, мы поговорили с Барри Дэвисом (Barry Davis), генеральным менеджером компании Intel и группы HPC, о том, какую технологию можно использовать для создания процессора для Аргоннской лаборатории. Но представитель Intel тогда отвечал очень расплывчато. Сейчас, когда мы знаем о CSA, можно сказать, что то, что описывал Дэвис, соответствует новой технологии.
«Основная идея состоит в том, чтобы взять граф потока данных программы до того, как компиляторы превратят его в набор команд конкретного процессора, и сразу направить этот поток данных в очень большое количество вычислительных элементов, способных одновременно обрабатывать свою порцию данных, обмениваясь фрагментами уже вычисленных результатов. Этот поток данных направляется сразу на конкретное «железо», а не на «сущность», созданную на языках типа Verilog или VHDL, как FPGA, поэтому нужно чётко понимать, что означает понятие «конфигурируемости» в данном случае.
Конфигурируемость состоит в том, что Intel располагает множеством разных конфигураций CSA — возможно, десятками или сотнями — которые настроены на приём потоков данных конкретных приложений, начиная от традиционного моделирования с преобладанием операций с обычной и двойной точностью до задач машинного обучения, где используются разнообразные комбинации чисел с плавающей точкой (floating point) и целых (integer). Точность в последних выбирается в зависимости от того, какая задача решается — например, задача обучения нейронной сети или задача классифицирования в машинном обучении. Этот подход противоположен подходу Intel, который использовался в процессорах Xeon. В поколении Skylake последние выпускались в трёх вариантах, соответственно с 10, 18 или 28 ядрами. Концепция с подключением ядер и подстраиванием тактовых частот, а также других функций, в зависимости от требований в различных ценовых сегментах, тоже останется в прошлом. В подходе CSA активируется столько базовых элементов, сколько это возможно, однако используется для конкретной задачи именно столько, сколько нужно. Это не упражнение в производстве мощностей, а подстройка вычислительных машин под конкретные приложения. Это сейчас особенно важно, потому что закон Мура стремительно устаревает.
Intel разрабатывает CSA совместно с Министерством обороны США. Это выяснилось, когда 5 июля в Управлении патентов и товарных знаков США была опубликована патентная заявка (фактически, она была подана 30 декабря 2016 года). У Intel были и другие патентные заявки в рамках контракта с Министерством обороны. Среди них был патент на масштабируемые иерархические топологии межсоединений, а также патент, касающийся симметричной адресации. Патентная заявка на CSA интересна тем, что в ней среди имён авторов числится Аль Гара (Al Gara), архитектор параллельных суперкомпьютеров BlueGene в IBM, он же — архитектор семейства параллельных процессоров Knight (Xeon Phi) в Intel. Кроме него, в ней упомянуто множество разработчиков микросхем, которые работали в Intel с тех пор, как компания купила компанию DEC, производившую микропроцессоры Alpha.
CSA также интересны тем, что Intel, если верить слухам, собирается попытаться вывести их на рынок. Сначала суперкомпьютер Aurora A21 будет установлен в Аргоннской национальной лаборатории. Он, как предполагается, станет первой эксафлопсной машиной, установленной в США в 2021 году. Кроме того, слышны разговоры о том, что следующее поколение CSA может быть установлено и в других суперкомпьютерах, финансируемых правительством США — например, на машине Frontera в Техасском вычислительном центре высоких технологий (Texas Advanced Computing Center). Недавно была опубликована новость, в которой говорилось, что этот центр был бы очевидным кандидатом, так как на нём уже будут использоваться процессоры Intel Xeon, и потому что Центр обладает значительным опытом работы с семейством процессоров Intel Knight. То есть, после остановки работы над процессорами Knight, Intel должен разработать машины не только для Аргоннской лаборатории, но и для Техасского центра. Но об этом пока мы можем только догадываться.
Подход CSA минималистский. В нём используются только такие вычислительные, межсоединительные, коммутационные и запоминающие элементы, которые необходимы для конкретной рабочей нагрузки. Основной компонент CSA — сетка вычислительных и запоминающих устройств, например такая:
В приведённом выше примере есть элементарные процессоры (PE, processing elements), которые выполняют инструкции для целых чисел или чисел с плавающей точкой, а также предусмотрены межсетевое соединение между элементарными процессорами и возможность размещения узлов хранения данных локально на блоке и их связь с матрицей для организации совместного доступа процессоров. Такой акселератор CSA можно реализовать по принципу «один на один» с ядрами на чипе Xeon с доступом к одной и той же основной памяти, или же в виде нескольких чипов в одном пакете с межблочным соединением, в виде дискретных устройств со своими разъёмами, или через шину PCI-Express с использованием модели разгрузки. Кажется, Intel не заинтересован в реализации модели разгрузки, и наверно они планируют поместить модули CSA в тот же пакет, что и модули Xeon, возможно, в конфигурации «много к одному», где процессорам Xeon предоставлена функция загрузки программ CSA и извлечения данных с «тёплых» и «холодных» ЗУ (накопителей для активных и неактивных данных) для приложений, работающих на одном или нескольких CSA.
На этой схеме проиллюстрировано соответствие между кодом приложения, графом потока данных, созданным компилятором, и набором элементов, которые используются в чипе CSA для проведения этого потока данных с ввода на вывод:
Это, очевидно, очень простой пример. Потоки данных могут быть сложными, а архитектура немного более забористой, например:
В этом случае на чипе имеется несколько уровней коммутаторов, которые соединяют обрабатывающие элементы, которые выполняют операции на целых числах и операции умножения с накоплением (fused multiply-add, FMA), и связывают их с контроллерами памяти, где хранятся данные до их обработки. Элементы обработки имеют свои собственные буферы и регистры. Такие построения могут быть продолжены и дальше, чтобы получить более сложные устройства CSA, если это необходимо, например:
В этом более сложном устройстве кластеры элементов обработки обращаются к файлам адресных запросов с их собственными буферами адресных таблиц. Эти запросы затем отправляются в интерфейс кэша L2 и в банки кэш-памяти второго уровня. Возможно, часть кэша L3 распределяются равномерно по всему этому бардаку.
Фактура отдельных CSA-элементов также распространяется и на меж-CSA-взаимодействие. По мере того, как программа занимает всё больше памяти и процессорных мощностей, а поток данных становится больше, он может беспрепятственно распределяться по элементам на разных CSA. Существует множество способов реализации CSA, и традиционные процессоры CPU могут быть добавлены к устройству или полностью исключены из него, в зависимости от необходимости.
По мнению авторов, главное в подходе CSA состоит в том, что они сочетают очень высокую концентрацию вычислительных и запоминающих элементов и очень высокую энергоэффективность, потому что по мере запуска программы активируются только те функции, которые необходимы для конкретного потока данных. Все остальные элементы на кристалле будут простаивать. Это может привести к тому, что если у нас будут неспецифицированные CSA, то у нас будет очень много «тёмного кремния», деньги будут потрачены впустую. Поэтому трюк заключается в создании вариантов устройств CSA, настроенных на конкретные приложения и их потоки данных.
«Массив процессорных элементов может быть неоднородным, например, так что ни один процессорный элемент не будет поддерживать полную архитектуру потока данных CSA. И / или один из нескольких процессорных элементов будет запрограммирован выполнять лишь небольшое количество операций, но очень эффективно» — пишут авторы патентов. «Таким образом, некоторые варианты реализации изобретения могут играть роль акселератора, у которого есть массив обрабатывающих элементов, который является вычислительно плотным по сравнению с архитектурами последовательной обработки данных. При этом он может опережать примерно на порядок процессоры HPC по энергопотреблению и производительности». По самой природе устройств и свойственных им потоков данных, которые берут начало непосредственно в программах, параллелизм, который может быть использован в программах, является явным и картируется прямо в само устройство. Можно ожидать, что CSA смогут работать с программами на C, C ++ и Fortran, которые будут непосредственно программно обращаться к CSA, например так:
Прототипный компилятор, предлагаемый Intel для CSA (мы предполагаем, что он на данный момент уже реализован, судя по намерениям действительно использовать CSA на машине Aurora A21) имеет фронт-энд Clang, которой пришёл на место промежуточного представления LLVM в тех местах, где обработка кода должна быть ускорена. Затем промежуточное представление компилируется в набор команд для CSA.
Внедрение унаследованного последовательного кода на этом устройстве потребует сложных интерфейсов памяти, и Intel, очевидно, прекрасно об этом осведомлён. Хитрость, по словам представителей Intel, заключается в том, чтобы рассматривать доступ к памяти как любую другую операцию на потоке данных.
«Разные реализации CSA обеспечивают такие базовые операции как, например, загрузка памяти. На вход берётся адресный канал, а канал ответа заполняется значениями, соответствующими адресу и хранилищу», — говорится в заявке на патент. «Реализации CSA могут также обеспечивать выполнение более сложных операций, таких как операторы атомизации и согласованности внутри памяти. Эти операции могут иметь сходную семантику с той, которая была у фон Неймана. Они могут ускорить существующие программы, написанные с использованием последовательных языков, таких как C и Fortran. Следствием поддержки этих языков является то, что придётся поработать с проблемами порядка адресов памяти, например, с последовательным порядком операций с памятью, типичным для этих языков».
Самое главное, опять же, в том, что параллелизм в коде явно реализован и «заточен» под CSA с заданной конфигурацией элементов обработки, хранения, переключения и т. д.
Таким образом, все виды параллелизма — инструкции (instruction), данные (data), конвейер (pipeline), вектор (vector), память (memory), поток (thread) и задача (task) — могут быть определённым образом реализованы в устройстве CSA.
В патентной заявке не так много информации, чтобы показать, как производительность CSA отличается от стандартных процессоров Xeon, но мы можем попробовать догадаться. Когда обрабатывающие элементы очень малы по сравнению с ядром центрального процессора (на которое нагружено много всяких деталей для поддержания состояния и хранения данных, которые были посланы в неисправные исполнительные ячейки, а также блоков предсказания ветвления и блоков выборочного (speculative) исполнения), подход CSA может накапливать до 16 раз больше единиц FMA на матрице, чем линейный процессор; это сравнение предположительно верно для AVX-2 или AVX-512 из моделей Xeon. Из другого высказывания представителей Intel следует, что производительность на операциях с плавающей точкой блока CSA может быть на порядок выше, чем у обычных процессоров. Если мы хотим получить эксафлопсы, используя только 20 мегаватт мощности (что, конечно, желаемо всем сообществом HPC), нам такие машины очень пригодятся.
В своей патентной заявке Intel продемонстрировал, что технология CSA может быть реализована как система на чипе, причём несколько блоков CSA будут «обёрнуты» совместно используемыми кэшами и контроллерами памяти с контроллерами шины, свисающими с кольцевого межсоединения. В другом раскладе это может выглядеть так: один процессор CPU связан с сопроцессором CSA с помощью контроллеров ввода / вывода южного моста. Основная память как обычно свисает с процессора. Интересно, что Intel признал, что в последней схеме может быть использован процессор Arm или MIPS, не обязательно интеловский X86. Есть ещё один расклад, в котором что CSA висит на чипсете на двухсокетном сервере, как это обычно бывает.
В следующей комбинации два CSA объединены на единой плате с двухточечными (point to point) соединениями между ними и чипсетом южного моста для внешнего ввода-вывода. На последней картинке в патентной заявке также показано, как в CSA эмулировать двоичный код типа как для X86 и других архитектур. Конечно, это всё легко изобразить в виде блок-схемы, но ужасно сложно реализовать в реальном мире, так, чтобы это было так же вычислительно эффективно, как и на блок-схеме. Но эта теоретическая наработка может пригодиться. Чип Itanium плохо выполнял эмуляцию, у него были не очень хорошие компиляторы, и по этим причинам он «не взлетел». Нам есть, на чём поучиться.
И последняя мысль, перед тем как мы поставим точку в данной статье и скажем, что будем думать над предложенной моделью ещё долго, а это всего лишь первые шаги: учитывая, что три года назад Intel потратил $ 16,7 млрд на покупку производителя FPGA Altera и готовится к отправке гибридов Xeon-FPGA, то какое место занимает CSA в бизнесе Intel? Если CSA будет легче программировать, они будут обеспечивать лучшие результаты для многих рабочих нагрузок, то зачем Intel потратил столько денег, чтобы купить Altera?