Как разрабатывать чипы GPU
Chapter 1 Introduction to Gpu Chip Design

Глава 1: Введение в дизайн GPU-чипа

Что такое GPU и чем они отличаются от CPU

Графические процессорные устройства (GPU) - это специализированные электронные схемы, предназначенные для быстрого манипулирования и изменения памяти с целью ускорения создания изображений в кадровом буфере, предназначенном для вывода на дисплей. GPU были первоначально разработаны для разгрузки CPU от 2D- и 3D-рендеринга графики, что позволяет достичь гораздо более высокой производительности для приложений, интенсивно использующих графику, таких как видеоигры.

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

Ключевые архитектурные различия между CPU и GPU включают:

  • Количество ядер: GPU имеют большое количество небольших ядер (сотни или тысячи), в то время как CPU имеют несколько крупных, мощных ядер (2-64).
  • Иерархия кэша: CPU имеют большие кэши для снижения задержки, в то время как GPU имеют меньшие кэши и больше полагаются на высокую пропускную способность для компенсации задержки.
  • Логика управления: CPU имеют сложные возможности прогнозирования ветвлений и внепорядковое выполнение. GPU имеют гораздо более простую логику управления.
  • Набор инструкций: CPU поддерживают широкий спектр инструкций для общих вычислений. Наборы инструкций GPU более ограничены и оптимизированы для графики.
  • Пропускная способность памяти: GPU имеют очень высокую пропускную способность памяти (до 1 ТБ/с) для питания своих многочисленных ядер. У CPU более низкая пропускная способность (50-100 ГБ/с).
  • Производительность с плавающей запятой: GPU способны на гораздо более высокую производительность с плавающей запятой, что делает их подходящими для задач высокопроизводительных вычислений и искусственного интеллекта.

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

Ключевые приложения и важность GPU

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

Компьютерная графика и игры

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

Высокопроизводительные вычисления (HPC)

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

Искусственный интеллект и машинное обучение

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

Криптовалютный майнинг

GPUs также широко используются для майнинга криптовалют, поскольку их параллельные вычислительные возможности делают их хорошо подходящими для криптографических алгоритмов хеширования, используемых в криптовалютах, основанных на доказательстве работы, таких как Bitcoin. Высокопроизводительные GPU от AMD и Nvidia были в очень высоком спросе во время криптовалютного бума 2017 года.

Ускоренные вычисления и периферийный искусственный интеллект

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

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

Ландшафт вычислительных ускорителей

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

Программируемые вентильные матрицы (FPGA)

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

Специализированные интегральные схемы (ASIC)

ASIC - это интегральные схемы, специально разработанные для конкретного применения, в отличие от универсальных процессоров. Современные ASIC часто включают в себя целые 32-битные или 64-битные процессоры, блоки памяти, включая ПЗУ, ОЗУ, EEPROM, флэш-память и другие крупные строительные блоки. ASIC широко используются в добыче биткойнов, ускорителях ИИ, беспроводной связи 5G и устройствах Интернета вещей.

Ускорители ИИ

Ускорители ИИ - это специализированные микросхемы, предназначенные для ускорения рабочих нагрузок ИИ, особенно обучения и вывода нейронных сетей. Примеры включают Tensor Processing Units (TPU) от Google, Nervana Neural Network Processors (NNP) от Intel и ряд стартапов, разрабатывающих чипы ИИ с нуля. Эти микросхемы используют вычисления с пониженной точностью, эффективные схемы умножения матриц и тесную интеграцию вычислений и памяти, чтобы достичь гораздо более высокой производительности на ватт, чем GPU или CPU при работе с задачами ИИ.

Блоки обработки изображений (VPU)

VPU - это специализированные микросхемы, предназначенные для ускорения компьютерного зрения и обработки изображений. Они часто включают в себя специализированное оборудование для задач, таких как обработка сигналов изображения, стереозрение и обнаружение объектов на основе CNN. VPU широко используются в таких приложениях, как автомобильные ADAS, дроны, AR/VR-гарнитуры, умные камеры и другие периферийные устройства, требующие обработки визуальной информации с низкой задержкой.

Нейроморфные и квантовые чипы

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

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

Важные рабочие нагрузки. Ускорители вычислений

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

Основы аппаратного обеспечения GPU

Современный GPU состоит из нескольких ключевых аппаратных компонентов:

Потоковые мультипроцессоры (SM)

SM - это основной строительный блок архитектуры GPU NVIDIA. Каждый SM содержит набор ядер CUDA (обычно от 64 до 128), которые разделяют логику управления и кэш инструкций. Каждое ядро CUDA имеет полностью конвейеризованное целочисленное арифметическое логическое устройство (ALU) и устройство с плавающей запятой (FPU). Как правило, чип GPU имеет от 16 до 128 SM, что в результате дает тысячи ядер CUDA.

Текстурный/L1-кэш

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

Общая память

Общая память - это быстрая, встроенная память, которая совместно используется ядрами CUDA внутри SM. Ее можно использовать как программируемый кэш, обеспечивая более высокую пропускную способность и меньшую задержку доступа к часто используемым данным. Общая память разделена на равные по размеру модули памяти (банки), к которым ядра могут получать одновременный доступ.

Регистровый файл

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

Планировщик варпов

Планировщик варпов отвечает за управление и планирование варпов на SM. Варп - это группа из 32 потоков, которые выполняются параллельно на ядрах CUDA.Вот перевод на русский язык с сохранением оригинального кода:

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

Сеть межсоединений

Сеть межсоединений связывает СМ с общим кэшем L2 и контроллерами памяти GPU. Она, как правило, реализуется в виде кроссбарной коммутации, что позволяет нескольким СМ одновременно получать доступ к кэшу L2 и DRAM.

Контроллеры памяти

Контроллеры памяти обрабатывают все запросы на чтение и запись в DRAM GPU. Они отвечают за оптимизацию моделей доступа к DRAM для максимального использования пропускной способности. Современные GPU имеют очень широкие интерфейсы DRAM (от 256 до 4096 бит) и поддерживают высокопроизводительные технологии памяти, такие как GDDR6 и HBM2.

RT-ядра и тензорные ядра

Современные GPU NVIDIA также включают специализированные аппаратные блоки для ускорения трассировки лучей (RT-ядра) и AI/глубокого обучения (тензорные ядра). RT-ядра ускоряют обход иерархии ограничивающих объемов (BVH) и тесты пересечения луча с треугольником, в то время как тензорные ядра обеспечивают высокопроизводительное умножение матриц и операции свертки.

Эти аппаратные компоненты работают вместе, чтобы позволить GPU достигать очень высокой вычислительной производительности и пропускной способности памяти, что делает их хорошо подходящими для параллельных рабочих нагрузок в графике, HPC и AI. Высокопараллельная архитектура и специализированные аппаратные блоки современных GPU позволяют им обеспечивать производительность, на порядки превышающую производительность универсальных ЦП для определенных рабочих нагрузок.

Краткая история GPU

Историю GPU можно проследить до ранних дней ускорения 3D-графики в 1990-х годах:

  • 1990-е: Ранние 3D-ускорители, такие как 3dfx Voodoo и NVIDIA RIVA TNT, начали появляться в середине 1990-х годов, чтобы разгрузить ЦП от рендеринга 3D-графики. Это были устройства с фиксированной функциональностью, оптимизированные для определенного набора графических API и не имевшие программируемости.

  • 1999: NVIDIA представила GeForce 256, первый GPU, реализовавший аппаратную трансформацию и освещение (T&L) в дополнение к стандартному рендерингу 3D.Пожалуйста, вот перевод на русский язык этого файла в формате Markdown. Для кода не переводите сам код, а только комментарии.

  • 2001 год: NVIDIA выпустила GeForce 3, который представил программируемые вершинные и пиксельные шейдеры, открыв путь для более реалистичных и динамичных визуальных эффектов. Это ознаменовало начало перехода от фиксированных функций к программируемым графическим конвейерам.

  • 2006 год: Выпуск NVIDIA GeForce 8800 GTX ознаменовал собой важный поворотный момент, поскольку это был первый GPU, поддерживающий модель программирования CUDA, что позволило разработчикам использовать GPU для общих вычислений (GPGPU) помимо графики. Он имел 128 ядер CUDA и мог достигать производительности более 500 GFLOPS.

  • 2008 год: Apple, AMD, Intel и NVIDIA сформировали рабочую группу OpenCL для разработки открытого стандарта для параллельного программирования на гетерогенных системах. OpenCL предоставил альтернативу CUDA, независимую от поставщика, хотя CUDA оставалась наиболее широко используемой платформой GPGPU.

  • 2010 год: NVIDIA запустила архитектуру Fermi, которая имела до 512 ядер CUDA, единую иерархию кэша L1/L2, поддержку памяти ECC и улучшенную производительность двойной точности. Это сделало GPU пригодными для более широкого круга приложений HPC и научных вычислений.

  • 2016 год: NVIDIA представила архитектуру Pascal с Tesla P100, которая имела высокоскоростную память HBM2, до 3584 ядер CUDA и специализированные ядра FP16 для глубокого обучения. P100 мог обеспечить производительность более 10 TFLOPS, закрепив за GPU статус платформы выбора для обучения ИИ.

  • 2018 год: NVIDIA запустила архитектуру Turing, которая представила RT-ядра для трассировки лучей в реальном времени и Tensor-ядра для ускорения вывода ИИ. Turing ознаменовал значительный этап в архитектуре GPU, поскольку расширил возможности GPU за пределы простой растеризации и GPGPU, включив в себя передовые методы визуализации и ускорение ИИ.

Заключение

За последние два десятилетия GPU эволюционировали от фиксированных графических ускорителей до высокопрограммируемых устройств...Вот перевод на русский язык:

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

  • Введение программируемого затенения с поддержкой ветвления и циклов
  • Унифицированные архитектуры шейдеров, которые позволяют использовать одни и те же вычислительные блоки для различных задач затенения
  • Добавление поддержки общих моделей программирования, таких как CUDA и OpenCL
  • Повышение энергоэффективности за счет широкого использования многопоточности для сокрытия задержек памяти и поддержания загрузки арифметических блоков
  • Постоянное улучшение пропускной способности памяти и внедрение технологий высокоскоростной памяти, таких как GDDR6 и HBM2
  • Включение специализированных блоков для трассировки лучей и тензорной обработки для ускорения рендеринга и рабочих нагрузок ИИ

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

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