Как спроектировать собственный GPU с нуля за две недели

The Cognitive Revolution 4,7 тыс. 1 ч 52 мин 8 мин 06.05.2024
Главное

Разработчик Адам Маджмудар совершил то, что многие считали невозможным для новичка: всего за несколько недель он с нуля спроектировал собственный графический процессор в рамках проекта TinyGPU. В интервью для подкаста The Cognitive Revolution он подробно рассказал, как современные ИИ-инструменты позволяют ускорить обучение сложнейшим инженерным дисциплинам в сто раз. Этот эксперимент не только демистифицирует устройство современных чипов, на которых обучаются передовые нейросети, но и указывает на тектонические сдвиги в самой индустрии полупроводников.

💡 Прорывной эксперимент: от нулевого опыта до архитектуры чипа 4:34

До запуска проекта TinyGPU Адам Маджмудар в течение трех лет развивал технологическую компанию Thirdweb. Отойдя от операционного управления, он решил посвятить себя интенсивным образовательным марафонам на стыке ключевых технологий будущего, стремясь максимально быстро обресить техническую уверенность и глубокое понимание индустрии. Его целью стала проверка радикальной гипотезы: традиционное университетское образование в сфере микроэлектроники, занимающее годы, можно сократить примерно в 100 раз за счет жесткой фокусировки на базовых принципах.

По мнению Маджмудара, для освоения комплексной темы нет необходимости изучать абсолютно все нюансы, поскольку работает условное правило «99/1», где всего один процент фундаментальных знаний обеспечивает основную практическую ценность. В рамках первого двухнедельного спринта исследователь поставил перед собой задачу изучить полный цикл проектирования микросхем — от автоматизации электронного дизайна (EDA) до физического производства на фабриках.

Успешное завершение теоретического этапа подтолкнуло разработчика к созданию осязаемого и полезного проекта. На фоне глобального бума искусственного интеллекта и появления специализированных тензорных процессоров (TPU), Маджмудар остановил свой выбор на создании собственного графического сопроцессора. По задумке автора, TinyGPU должен был стать открытым и понятным учебным пособием, обнажающим внутреннее устройство сложнейших вычислительных систем современности.

🛠️ Преодоление закрытости индустрии и стек открытых инструментов 7:40

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

Ситуация усугубляется баснословной стоимостью профессионального программного обеспечения. Лицензии на проприетарные платформы автоматизации проектирования (EDA) от лидеров рынка, таких как Synopsys или Cadence, обходятся компаниям в сотни тысяч и миллионы долларов за одно рабочее место, что полностью отсекает независимых энтузиастов.

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

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

🧠 Параллелизация против памяти: главные уроки GPU-архитектуры 19:35

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

В программировании эта концепция известна как паттерн SIMD (одна инструкция — множество данных), а на аппаратном уровне она трансформируется в SIMT (одна инструкция — множество потоков). Разработчику необходимо написать код для обработки всего одного условного элемента, а аппаратная часть берет на себя задачу размножения этого кода по сотням и тысячам вычислительных ядер.

Однако ключевым озарением в процессе работы для Адама Маджмудара стала критическая роль подсистемы памяти, на которую ему указал известный разработчик Джордж Хотц. Новички часто ошибочно полагают, что производительность GPU упирается в количество математических блоков (ALU) для сложения и умножения. В реальности главным бутылочным горлышком выступает пропускная способность магистралей передачи данных.

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

📝 Архитектура набора инструкций (ISA) и логика ядра 26:50

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

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

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

Жесткие ограничения учебного техпроцесса продиктовали предельную компактность ISA TinyGPU. Каждая инструкция имеет строго фиксированную длину 16 бит. Первые 4 бита зарезервированы под код операции (Opcode), что жестко лимитирует систему максимум 16 возможными командами. На адресацию регистров выделено по 4 бита, из-за чего каждому потоку доступно ровно 16 регистров, причем последние три из них (13, 14 и 15) заблокированы под нужды аппаратного контекста.

Для реализации условных переходов и циклов в системе используются спаренные инструкции сравнения (CMP) и условного ветвления (BRnzp). Команда сравнения вычитает значения двух регистров и выставляет флаги в специальном регистре состояния (положительный результат, ноль или отрицательное значение). Следующая за ней инструкция ветвления анализирует эти флаги и, в случае совпадения условий, принудительно меняет значение счетчика команд (Program Counter), заставляя поток прыгать на нужную строчку кода.

🏗️ Физический уровень: диспетчер, ядра и логические вентили 58:36

На верхнем аппаратном уровне TinyGPU разделен на внешнюю интерфейсную часть и внутренний вычислительный массив. Хост-машина (внешний CPU) загружает скомпилированные бинарные инструкции в программную память, исходные массивы данных — в память данных, а общее количество потоков прописывает в регистр управления устройством. После подачи физического сигнала старта управление переходит к аппаратному диспетчеру чипа.

Диспетчер является одним из самых сложных блоков процессора. Его задача — разбивать массив потоков на группы (блоки) по 4 штуки и распределять их по четырем доступным физическим ядрам чипа, отслеживая их готовность по алгоритму Round-Robin. Получив блок, ядро сбрасывает свое внутреннее состояние и запускает конвейер из трех общих узлов:

Внутри каждого ядра TinyGPU параллельно функционируют четыре изолированных процессорных потока. Каждый такой поток обладает собственным счетчиком команд (PC), блоком регистров, арифметико-логическим устройством (ALU) и узлом загрузки-выгрузки (LSU). На уровне ALU логические операции сложения, вычитания, умножения и деления физически происходят одновременно на выделенных микросхемах в каждом такте. Итоговый результат просто отсекается на выходе с помощью мультиплексоров, управляемых декодером инструкции.

Процесс перевода этого логического описания в физический чертеж (харденинг) Маджмудар осуществлял на своем ноутбуке Apple M2 с помощью открытого пакета OpenLane. Программа выполняет сложнейшую цепочку из 50 шагов оптимизации, синтезируя код SystemVerilog в топологию логических вентилей, расставляя элементы по площади виртуального кристалла, разводя дорожки межсоединений и просчитывая паразитные емкости проводов. По признанию автора, ему пришлось пройти через 35 изнурительных циклов отладки из-за запутанных и недокументированных ошибок таймингов, прежде чем утилита сгенерировала финальный файл GDSII для отправки на производство.

🚀 Эволюция полупроводников: ИИ-ассистенты и революция микрочипов 1:41:08

Успех столь стремительного проектирования Адам напрямую связывает с использованием больших языковых моделей. Не имея профильного бэкграунда, он превратил ChatGPT и Claude в интерактивных наставников. Вместо пассивного чтения документации инженер формулировал гипотезы о работе аппаратных блоков и заставлял ИИ валидировать его идеи. По оценке Маджмудара, современные нейросети обладают удивительной инженерной интуицией, выходящей за рамки простого копирования текстов из интернета, что позволяет радикально ускорять освоение сложнейших профессий.

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

Параллельно меняется и сама архитектура вычислений под нужды ИИ. Ведущий подкаста Нейтан Ленс обратил внимание на недавнее исследование Microsoft, посвященное 1.58-битным нейросетям, где веса моделей принимают всего три значения: -1, 0 и 1. По мнению Маджмудара, переход на тернарную логику сулит колоссальное упрощение чипов будущего. Исчезнет необходимость в громоздких блоках вычислений с плавающей запятой (FLOPS), а размерность регистров и ALU сожмется до минимума, многократно снижая энергопотребление и тепловыделение чипов. Индустрия уже движется в этом направлении: к примеру, в новейшей архитектуре Blackwell компания Nvidia умышленно снижает разрядность типов данных ради кратного роста эффективной скорости ИИ-вычислений.

💬 Цитаты

«Графические процессоры — это по большей части задача обхода задержек памяти и их сокрытия на разных уровнях.»

Адам Маджмудар 25:06

«Я считаю, что благодаря ИИ люди могут учиться вещам в 100 или 200 раз быстрее, чем они думают.»

Адам Маджмудар 1:51:14
👥 Спикеры
🔗 Упомянутые сайты и проекты
📖 Термины
ISA (Instruction Set Architecture)
Архитектура набора инструкций, определяющая поддерживаемые процессором команды и типы данных.
SIMD (Single Instruction Multiple Data)
Архитектура вычислений, при которой одна инструкция одновременно применяется к множеству элементов данных.
EDA (Electronic Design Automation)
Программное обеспечение для автоматизации проектирования и тестирования электронных схем и микрочипов.
Харденинг (Hardening)
Процесс физического проектирования, переводящий логическое описание чипа на языке Verilog в топологию слоев для кремниевой фабрики.
ALU (Arithmetic Logic Unit)
Арифметико-логическое устройство, физический блок процессора, выполняющий базовые математические операции.
📊 Цифры
🗓 Хронология
  1. Последние 3 года Адам Маджмудар работал сооснователем в стартапе Thirdweb перед тем, как заняться глубоким изучением технологий.
  2. Первые 2 недели спринта Автор полностью освоил стек проектирования микросхем, включая инструменты EDA и основы фабричного производства.
  3. Последующие несколько недель Создание архитектуры TinyGPU, написание логики на SystemVerilog, отладка и успешное прохождение 35 циклов харденинга.
⚖️ Другая сторона
Технологии и IT TinyGPU Адам Маджмудар Архитектура чипов OpenLane The Cognitive Revolution