Любой, кто изучал электротехнику, знает, что при наличии необходимых инструментов, ноу-хау и большого упорства можно разработать базовый процессор с нуля. Конечно, он не будет похож на современные процессоры, но как насчет графических процессоров? Наверняка они не могут быть другими, не так ли? Один целеустремленный инженер-программист решил сделать именно это, но обнаружил, что это много сложнее, чем вы думаете.
Адам Маджмудар (Adam Majmudar) ведет хронику своих испытаний и невзгод в Twitter (через Tom’s Hardware), начав с изучение основ архитектуры центрального процессора, прежде чем перейти к созданию полноценного CPU. Это явно не похоже на те чипы, которые Вы можете купить для своего игрового ПК, и очень напоминает мне базовые 4-битные процессоры, которые я учился проектировать много десятилетий назад.
Последние ~2 недели я потратил на создание графического процессора с нуля, не имея никакого опыта. Это оказалось намного сложнее, чем я ожидал.Трекер прогресса в теме (самые крутые вещи в конце)👇 pic.twitter.com/VDJHnaIheb25 апреля 2024 г.
Современные программные пакеты и языки описания аппаратуры значительно упрощают этот процесс, но это все еще сложная задача.
Окрыленный успехом, Маймудар решил, что настало время сделать то же самое с GPU. В конце концов, базовая структура шейдерного блока – это не что иное, как блок арифметической логики, с несколькими регистрами для хранения данных, другим блоком для загрузки и хранения этих данных, и чем-то для управления всем процессом выполнения операции.
Инженер быстро понял, что, хотя CPU и GPU имеют много общих аспектов, последние сильно отличаются друг от друга в том, как они используют память и управляют потоками. Стоит также отметить, что Маджмудар стремился создать не “графический” GPU, а скорее GPGPU – другими словами, он не разрабатывал такие системы, как треугольная установка, TMU, ROP или любые другие многочисленные схемы с фиксированными функциями, которыми оснащены чипы в видеокартах.
Но, к его чести, его базовая конструкция GPU в конечном итоге заработала после решения ряда проблем с помощью других людей и смогла выполнить небольшое количество инструкций и произвести несколько матричных вычислений в программном моделировании. Его проекты CPU и GPU будут воплощены в физической форме в рамках проекта Tiny Tapeout.
Самое замечательное в работе Маджмудара то, что он выложил весь проект на Github, чтобы иметь ресурс, который может использовать каждый, кто хочет узнать больше о том, как работает GPU в глубинах его аппаратной части.
Любой может научиться программировать GPU, просто потому, что все необходимые инструменты легко доступны в Интернете, а также множество учебников и упражнений. Научиться проектировать шейдерный блок на уровне транзисторов – совсем другое дело, поскольку ни один из трех крупных производителей чипов (AMD, Intel, Nvidia) не делится такой информацией публично.
А теперь, если Вы меня извините, я отправляюсь разрабатывать GPU со 100 000 шейдерными блоками. Интересно, под каким именем я должен продавать его – Raforce? Gedeon? Зная мои навыки, GeFarce будет более подходящим, я думаю.