Видеокарта на 8192 ядрах RISC-V своими руками

Как энтузиаст собрал GPU на 8 192 ядра из дешевых микроконтроллеров

Тирекс
Тирекс Самый зубастый автор
19 июля 2026

Разработчик bitluni провел уникальный эксперимент, объединив 8 192 бюджетных микроконтроллера RISC-V в одну самодельную видеокарту.

Изображение записи

Немецкий разработчик с ником bitluni потратил около полугода на создание одной из самых необычных DIY-систем. Вместо того чтобы использовать готовый графический процессор или FPGA, он решил построить аналог графического ускорителя из 8 192 недорогих RISC-V микроконтроллеров. Их он объединил в единую иерархическую структуру.

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

Как все начиналось

За последние несколько лет автор проекта собрал несколько крупных кластеров из недорогих RISC-V микроконтроллеров, постепенно увеличивая их масштаб и усложняя архитектуру. В предыдущих экспериментах он отрабатывал способы объединения десятков и сотен простых чипов в единую вычислительную систему, изучал нюансы синхронизации, обмена данными и распределения нагрузки. Каждый новый проект становился для него своеобразным полигоном, где проверялись идеи, которые затем переходили в следующую версию.

Самодельная видеокарта bitluni: собранный модуль с рядом вертикальных плат на деревянном столе.
Самодельная видеокарта bitluni. Источник.

После публикации одного из роликов о самодельном GPU с героем статьи связалась компания Altium, разрабатывающая программное обеспечение для проектирования печатных плат. Она предложила поддержку проекта, что позволило автору отказаться от сравнительно небольших экспериментов и взяться за гораздо более амбициозную конструкцию. Наш гик решил, что не будет искать легких путей, поэтому стартовал с проектирования системы, насчитывающей 8 192 отдельных вычислительных узла.

В это же время он начал работать с новым микроконтроллером WCH CH570. Чип стоил около 13 центов, работал на частоте до 100 МГц, имел 12 КБ SRAM, аппаратный USB и оказался достаточно производительным, чтобы в одном из предыдущих проектов самостоятельно формировать телевизионный видеосигнал. Именно тогда у автора возникла мысль использовать эти микроконтроллеры не просто как вычислительные узлы, а попытаться построить из них некое подобие графического процессора.

Идея была одновременно простой и безумной: выделить отдельный микроконтроллер для каждого пикселя изображения. Для современных разрешений такой подход потребовал бы сотни тысяч или даже миллионы чипов, поэтому в качестве отправной точки он выбрал старое разрешение QVGA — 320×240 пикселей. Даже в этом случае требовалось более 65 000 микроконтроллеров. Это делало проект крайне дорогим. А еще все упиралось в ограничения по питанию. Поэтому количество вычислительных узлов пришлось сократить до 8192, сохранив общую архитектуру и проверив ее на практике.

Выбор железа и архитектура

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

В основании системы 8 192 микроконтроллера CH570, они выполняют основные вычисления. Над ними расположены 256 более производительных CH32V с аппаратным блоком вычислений с плавающей точкой. Каждый такой контроллер отвечает за группу из 32 CH570: отправляет им команды, собирает результаты и координирует их работу. Благодаря этому нет необходимости организовывать обмен данными сразу между тысячами устройств — каждый уровень работает только со своей группой.

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

Инженер наносит припаивающую пасту на печатную плату с микросхемами с помощью шприца на верстаке.
Источник.

Правда, одна из самых серьезных сложностей обнаружилась там, где ее почти не ждали. Сначала bitluni рассчитывал использовать один внешний генератор тактового сигнала для всей группы из 32 микроконтроллеров. Но тут ничего не вышло: сигнал быстро искажался из-за нагрузки, а часть чипов вообще отказывалась запускаться. Разбираясь в причинах, автор выяснил, что CH570 не поддерживает тот режим внешнего тактирования, на который он рассчитывал. Ошибка обошлась дорого — проект пришлось откатить на несколько недель назад, заново переработать схему и заказать новые платы.

В итоге каждому из 8 192 микроконтроллеров пришлось установить собственный кварцевый резонатор. Количество компонентов резко выросло, разводка печатных плат стала намного сложнее, зато система наконец заработала стабильно. Именно после этого удалось перейти от небольших тестовых модулей к полноценным вычислительным платам.

Сборка плат и механика

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

Вскоре выяснилось, что планы слишком грандиозны. Готовый проект одной из плат содержал более 5 000 компонентов и свыше 10 000 переходных отверстий. Компания-партнер просто не могла обработать такой объем данных, поэтому конструкцию пришлось переработать. Вместо одной большой платы разработчик разделил каждый вычислительный модуль на две части, пожертвовав изначальной компоновкой ради упрощения и запуска производства.

В результате вся система получила модульную конструкцию. Основными строительными блоками стали так называемые «лопасти» — платы, содержащие вычислительные узлы и управляющие контроллеры. Они подключаются к общей базовой плате через PCIe, что позволяет постепенно наращивать систему, заменять отдельные модули и тестировать их независимо друг от друга. Эту версию автор собрал из 16 таких модулей.

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

Питание и охлаждение

Еще на этапе проектирования стало понятно, что главным ограничением окажется вовсе не вычислительная мощность, а энергопотребление. Каждый микроконтроллер потребляет около 10 мА, поэтому для системы из 65 000 чипов ток достигал бы примерно 650 А при напряжении 3,3 В. Это уже около 2 кВт только на сами микроконтроллеры, без учета светодиодов и потерь в системе питания. По сути, разработчик практически уперся в максимальную мощность, которую можно получить от обычной розетки.

Именно поэтому все и сократили до 8 192 вычислительных узлов, о чем говорилось выше. Правда, даже в таком виде система потребляет более 2 кВт. Источником питания стал компьютерный блок Corsair мощностью 3 кВт, а напряжение 12 В преобразовывалось в 3,3 В с помощью 20 высокоэффективных понижающих модулей Murata, каждый из которых способен отдавать до 30 А. По словам bitluni, он выбрал их не только из-за высокой эффективности, но и потому, что по соотношению цены и допустимого тока они оказались одним из лучших вариантов.

Задняя панель разъемов модульного блока питания Corsair крупным планом.
Блок питания Corsair. Источник.

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

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

Как программировать тысячи чипов

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

В качестве основы автор использовал обычный 3D-принтер Bambu. На его печатающей головке закрепил небольшой держатель с подпружиненными контактами, а для самой платы напечатал специальную рамку. После калибровки принтер автоматически перемещался от одного микроконтроллера к другому, прижимал контакты к площадкам программирования и запускал запись прошивки.

За работу отвечал набор самописных скриптов на Python. Они управляли перемещением принтера, вызывали OpenOCD для записи прошивки и проверяли результат. Если какой-то микроконтроллер не удавалось прошить с первой попытки, программа немного смещала головку и повторяла операцию. По мере работы этот инструмент постоянно дорабатывался, пока не удалось добиться практически безошибочной прошивки всех плат.

Во время испытаний обнаружилась еще одна неприятная ошибка. При разводке были перепутаны линии MOSI и MISO, из-за чего микроконтроллеры не могли нормально обмениваться данными по SPI. К счастью, все это удалось устранить без выпуска новой партии плат: заранее предусмотренные последовательные резисторы позволили исправить ошибку несколькими проводными перемычками. Только после этого инженер смог проверить работу системы на полной скорости и отправить в производство остальные модули.

Результат и планы на будущее

Спустя полгода работы автору удалось довести систему до рабочего состояния. Первая версия объединяет 8 192 микроконтроллера и способна выводить изображение в разрешении QVGA. Каждый чип управляет собственным RGB-светодиодом, поэтому вся конструкция одновременно служит вычислительным кластером и большой светодиодной матрицей.

Разумеется, конкурировать с современными видеокартами такая разработка не может. Возможности отдельных микроконтроллеров слишком скромны, а значительная часть времени уходит на обмен данными между тысячами узлов. Однако сама идея оказалась вполне работоспособной: автору удалось объединить несколько тысяч независимых чипов в единую вычислительную архитектуру, которая действительно выполняет поставленные задачи.

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

И на этом история не заканчивается. Компоненты для следующей версии уже закуплены, а количество микроконтроллеров планируется увеличить до 32 000. Кроме того, автор обещает выпустить отдельное видео, посвященное программной части проекта, и опубликовать материалы разработки. Если нынешняя версия доказала, что сама идея вполне жизнеспособна, то планы для следующей — найти предел возможностей такой конструкции.