В этой статье мы поговорим о развитии архитектуры и аппаратной части, покажем проведенные тесты и оценим результаты и перспективы дальнейшей разработки. Если вы впервые слышите о мультиклеточной архитектуре, то можете ознакомиться с ней в предыдущих статьях:
«Компилятор С/С++ на базе LLVM для мультиклеточных процессоров: быть или не быть?»
«Развитие компилятора C для нового мультиклета-нейропроцессора»
Первое, что необходимо сказать, – Мультиклет концептуально переходит от разработки отдельных процессоров к разработке мультиклеточной платформы на основе MultiClet B – базового элемента, состоящего из 4 клеток.
Мультиклеточная платформа – это набор процессорных компонент, обеспечивающих создание высокоэффективной вычислительной среды современных мультиклеточных процессоров, ориентированных на использование в различных предметных областях.
В мультиклеточную платформу входят два типа ядер, два типа блоков матричной арифметики и два типа блоков доступа к памяти.
Процессоры могут отличаться количеством ядер, системой команд, разрядностью данных, методами доступа к памяти. Конфигурация процессора может быть гомогенной, если процессор состоит из однотипных ядер. Гетерогенной, если в составе процессора присутствуют ядра различных типов. Частным случаем гомогенной конфигурации является матричная организация, когда 1, 4 или 16 ядер объединены блоком матричных операций.
Ядро в мультиклеточном процессоре — это четыре клетки объединенные в единый неделимый блок - мультиклетку. Ядра отличаются разрядностью данных. «Младшее» ядро использует малоразрядные данные 8i, 16if, 32if, где цифры указывают на разрядность используемых данных, а индексы i, f на их тип (i — целочисленные, f — с плавающей точкой). «Старшее» – данные 16if, 32if, 64if. Каждый тип ядра имеет два варианта реализации внутренней архитектуры:
Первый предназначен для создания процессоров с низким энергопотреблением и имеет внутренние конвейеры с минимальным количеством ступеней.
Второй – для процессоров с высокой производительностью, что требует увеличения глубины конвейеров.
Количество мультиклеток и их тип для создания готового процессора выбирается по необходимости, в зависимости от поставленной задачи. Это позволяет создать широкую вариабельность процессоров, сформированных на этой платформе.
Блоки матричной арифметики также отличаются разрядностью, а именно блок, использующий 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 есть на сайте Мультиклета.
Благодарим за внимание!
amarao
Что-то вы странное посчитали.
Я делаю простейшую математику: Мультиклет сделал работу за 534 микросекунды (частота* количество тактов), а Intel — за 27 микросекунд.
Вывод — интел быстрее? Или "такт" — это не такт, а что-то другое?
IKMC Автор
Всё правильно, во всех бенчмарках Intel тратит меньше тактов на их выполнение — то есть да, быстрее. Вся ставка делается на то, что мультиклеточное ядро в 40 раз меньше по площади и энергопотреблению, отсюда и последние 2 строчки в бенчмарках, учитывающие это.
byman
Там видно, что Интел быстрее в 8.5 раз. т.е. нужно 9 мультиклеток чтобы сравняться по этому паказателю. Мультиклетка S1 дает 0.72 коремарка на Мгц. Это где-то в 7-8 раз меньше чем стандартное ядро Risc-V (пример U74 SiFive). т.е. нужно 30 клеток чтобы догнать на этом тесте одно ядро U74. Видно, что архитектура Мультиклета совершенно не для задач подобных коремарку.
Площадь ядра U74 (без кэшей) 0.22 mm2 для 28 нм TSMC!!!
IKMC Автор
На MultiClet B CoreMark показатель 0.935 / МГц. Производительность всех компилируемых программ сейчас сильно отстает из-за неоптимальности компиляции, мы это знаем.
Ядро MultiClet B (и S1) задумывалось как ускоритель. Уточню: там стоят 4 клетки, в каждой полноценный блок арифметики, поэтому пиковая производительность соответствующая на задачах с хорошим параллелизмом (см. показатели по Ethereum). CoreMark брался потому, что он достаточно известный, и чтобы было хоть на чем-то сравниваться, а так же показать, что хоть это и ускоритель, но он может выполнять полностью арбитрарный код.
Тем не менее, этот Risc-V процессор действительно более интересный кандидат для сравнения. Спасибо, что показали его, мы обязательно посмотрим на него повнимательнее. Можете дать ссылку, откуда взята информация по площади ядра U74?
byman
Я давно интересуюсь вашей архитектурой и отслеживаю все ваши достижения по рекламным статьям. U74 я выбрал как прибор реальный и доступный для покупки каждому. К тому же у него простая архитектура. Инфа о площади взята из статьи
sifive.cdn.prismic.io/sifive%2F5ec09861-351b-420c-b6e3-e2b76843044f_linley+report+-+sifive+raises+risc-v+performance.pdf
IKMC Автор
Спасибо! Посмотрим, разберемся.
byman
Если вы рассматриваете свое изделие как ускоритель, то хорошо если бы вы и сравнивали его с ускорителями. :)