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

Первое, что необходимо сказать, – Мультиклет концептуально переходит от разработки отдельных процессоров к разработке мультиклеточной платформы на основе MultiClet B – базового элемента, состоящего из 4 клеток.  

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

 

Мультиклеточная архитектура. Компоненты.
Мультиклеточная архитектура. Компоненты.

 

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

Процессоры могут отличаться количеством ядер, системой команд, разрядностью данных, методами доступа к памяти. Конфигурация процессора может быть гомогенной, если процессор состоит из однотипных ядер. Гетерогенной, если в составе процессора присутствуют ядра различных типов. Частным случаем гомогенной конфигурации является матричная организация, когда 1, 4 или 16 ядер объединены блоком матричных операций.

Ядро в мультиклеточном процессоре — это четыре клетки объединенные в единый неделимый блок - мультиклетку. Ядра отличаются разрядностью данных. «Младшее» ядро использует малоразрядные данные 8i, 16if, 32if, где цифры указывают на разрядность используемых данных, а индексы i, f на их тип (i — целочисленные, f — с плавающей точкой). «Старшее» – данные 16if, 32if, 64if. Каждый тип ядра имеет два варианта реализации внутренней архитектуры:

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

  2. Второй – для процессоров с высокой производительностью, что требует увеличения глубины конвейеров.

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

Блоки матричной арифметики также отличаются разрядностью, а именно блок, использующий 16-ти битовые данные с плавающей точкой и блок с данными 32f/64f. Каждый из блоков обеспечивает выполнение операции умножения матрицы.  Допустимы три варианта размерности матрицы. При использовании одного ядра: 2х2 (64f); 2х4 (32f); 4х4 (16f). При использовании 4-х ядер: 4х4 (64f); 4х8 (32f); 8х8 (16f). Для 16-ти ядер размерности составят: 8х8 (64f); 8х16 (32f); 16х16 (16f).

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

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

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

При создании MultiClet B были проведены множественные оптимизации ядра, что позволило увеличить тактовую частоту ядра до 2 ГГц на топонорме 28 нм и одновременно на 15-20% ускорить исполнения кода на этой частоте. Ускорение было достигнуто за счет сокращения времени прохождения команд по тракту исполнения. В частности, было уменьшено время обработки команд в буфере АЛУ и обеспечена передача адреса нового параграфа клеткам по отдельному тракту.  Компилятор был обновлен до LLVM 11.0.0, что также дало ускорение скомпилированного кода.

Бенчмарки

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

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

Процессор

MultiClet B

1 ядро Intel Kaby Lake

Частота

2000 МГц

4500 МГц

Энергопотребление

0.14 W

7 W

Площадь (14 нм)

0.23 мм2

9.5 мм2

CoreMark

CoreMark – набор тестов для комплексной оценки производительности микроконтроллеров и центральных процессоров, а также их C-компиляторов. Более подробное его описание и причину использования можно посмотреть в одной из предыдущих статей.

Процессор

MultiClet B, LLVM 11.0.0

1 ядро Intel Kaby Lake

CoreMark, тактов

1 069 416

125 740

CoreMark / с

1870

35788

CoreMark / c / Ватт

13358

5112

CoreMark / c / мм2

8131

3767

DhryStone

Dhrystone – синтетический тест производительности компьютеров, разработанный в 1984 году. Он содержит разные конструкции, такие как вызовы процедур, обращение по указателю, присваивание и т. д. Со времен его разработки, оптимизации компиляторов стали гораздо более агрессивными, и компиляторы просто выбрасывают куски бенчмарка, которые не несут полезную нагрузку, например множественные присваивания. Даже при компиляции второй версии бенчмарка, призванной бороться с такими оптимизациями компилятора, некоторый код оказывается выброшенным.

Процессор

MultiClet B, LLVM 11.0.0

1 ядро Intel Kaby Lake

Dhrystone, тактов

730

87

Dhrystone / с

2 739 726

51 724 137

Dhrystone / c / Ватт

19 569 471

7 389 162

Dhrystone / c / мм2

11 911 852

5 444 646

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

Задача о 8 ферзях

Задача о восьми ферзях – широко известная комбинаторная задача по расстановке фигур на шахматной доске. Исходная формулировка: «Расставить на стандартной 64-клеточной шахматной доске 8 ферзей так, чтобы ни один из них не находился под боем другого».

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

Процессор

MultiClet B, LLVM 11.0.0

1 ядро Intel Kaby Lake

8 ферзей, тактов

3 510 425

700 389

8 ферзей / с

570

6425

8 ферзей / c / Ватт

4069

917

8 ферзей / c / мм2

2477

676

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

Бинарные деревья, глубина 6

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

Процессор

MultiClet B, LLVM 11.0.0

1 ядро Intel Kaby Lake

Бинарные деревья, тактов

1 166 775

247 511

Бинарные деревья / с

1714

18181

Бинарные деревья / c / Ватт

12243

2597

Бинарные деревья / c / мм2

7452

1913

Множество Мандельброта, размерность 32х32

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

Процессор

MultiClet B, LLVM 11.0.0

1 ядро Intel Kaby Lake

Множество Мандельброта 32х32, тактов

905 430

301 888

Множество Мандельброта / с

2208

14906

Множество Мандельброта / c / Ватт

15777

2129

Множество Мандельброта / c / мм2

9603

1569

Все показанные бенчмарки были скомпилированы компилятором LLVM из исходного кода на С. Компилятор для мультиклеточной архитектуры пока генерирует не самый оптимальный код, что видно по количеству тактов, затрачиваемых на выполнение бенчмарков. Не вдаваясь в разницу между мультиклеточной системой команд и x86, количество инструкций, которые исполняет процессор от Интела для выполнения любого из этих бенчмарков в среднем в 2 и более раза ниже, чем количество инструкций, исполняемых мультиклеточным процессором. Это значит, что у компилятора есть перспектива развития, а также что производительность процессора на данных бенчмарках можно значительно ускорить только за счет оптимизации программного обеспечения.

Для оценки теоретической возможности компилятора и, соответственно, процессора, была проведена ручная оптимизации ассемблерного кода, полученного после компиляции программы, генерирующей множество Мандельброта. Было сделано следующее:

  • Удалены лишние пробросы значений инструкцией load, оставшиеся после phi узлов

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

  • Где это невозможно, передача данных сделана через регистры общего назначения

  • Объединены некоторые параграфы и/или перенесены некоторые инструкции из следующего параграфа в предыдущий для заполнения простоев, возникающих при переходе с одного параграфа на другой

Эти оптимизации, которые можно внедрить в компилятор и которые требуют разработки, были вручную вписаны в ассемблерный код, что позволило понять какие оптимизации компилятора будут самые эффективные, какие нужно делать в первую очередь, и какую можно ожидать производительность. В итоге, количество тактов уменьшилось с 905,430 до 412,117:

Процессор

MultiClet B, LLVM 11.0.0

MultiClet B, прогноз с оптимизациями

1 ядро Intel Kaby Lake

Множество Мандельброта 32х32, тактов

905 430

412 117

301 888

Множество Мандельброта / с

2208

4852

14906

Множество Мандельброта / c / Ватт

15777

34664

2129

Множество Мандельброта / c / мм2

9603

21099

1569

Полученные данные показывают, что при реализации сугубо последовательных алгоритмов, мультиклеточное ядро по производительности почти эквивалентно одному ядру архитектуры Intel Kaby Lake, но при этом энергопотребление и затраты кремниевых ресурсов получаются в десятки раз меньше.

Ethereum

Ethereum мы тоже используем как бенчмарк, и он очень важен по двум причинам:

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

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

 

Плата-ускоритель с 16 MultiClet S1

Плата-ускоритель с 16 MultiClet S1

NVIDIA 90HX

NVIDIA RTX 2080 Ti

AMD Radeon RX 5700 XT

AMD Radeon RX Vega 64

Хэшрейт, MHash/s

62

52

86

52.5

51.5

46

TDP

50 W

84 W

320 W

180 W

150 W

200 W

Хэшрейт / TDP

1.24

0.62

0.27

0.29

0.34

0.23

Техпроцесс

7 нм

28 нм

7 нм

12 нм

7 нм

14 нм

Как можно заметить, при сопоставимом хэшрейте энергопотребление в 2-3 раза ниже даже на техпроцессе 28 нм. При переходе на техпроцесс 7 нм энергопотребление сокращается еще сильнее.

Оценка использования мультитклеточной платформы для майнинга проводилась на примере получения криптовалюты Ethereum. Моделирование проводилось для процессора MultiClet S1, состоящего из 16 мультиклеток. Данные по производительности платы получены расчетным путем. Для сравнения была выбрана старшая модель платы компании NVIDIA, которая спроектирована специально для майнинга и выпуск которой намечен на 2021год.  Данные по ее планируемой производительности взяты с сайта компании. Результаты показывают, что при близкой производительности, плата использующая процессоры MultiClet S1, по удельным показателям, эффективна более чем в 2 раза по сравнению с NVIDIA 90HX.

Заключение

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

  • Во первых, на аппаратном уровне это оптимизация доступа к памяти, аналогичная той, которая реализована для команд, проходящих через буфер АЛУ.

  • Во вторых, это разработка и реализация алгоритмов оптимизации бэкенда для компилятора LLVM. При выполнении всех схем оптимизации (показанные на примере компиляции генератора множества Мандельброта) производительность мультиклеточного ядра на скомпилированном коде будет практически эквивалентно современному ядру Intel, но при этом удельные характеристики по энергопотреблению и кремниевым ресурсом в будут превосходить его в десятки раз.

Если у вас есть желание попробовать скомпилировать и запустить программы на функциональной модели, SDK есть на сайте Мультиклета.

Благодарим за внимание!