Как связаны процессор и видеокарта

Обновлено: 04.07.2024

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

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

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

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

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

Создание изображения из двоичных данных — сложный процесс. Чтобы создать трехмерное изображение, графическая карта сначала создает каркас из прямых линий. Затем он растрирует изображение (заполняет оставшиеся пиксели). Он также добавляет освещение, текстуру и цвет. Для динамичных игр компьютер должен проходить этот процесс от 60 до 120 раз в секунду. Без видеокарты для выполнения необходимых вычислений нагрузка на компьютер была бы слишком велика.

Видеокарта выполняет эту задачу, используя четыре основных компонента:

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

Далее мы более подробно рассмотрим процессор и память.

Графический процессор — это электронная схема, которую ваш компьютер использует для ускорения процесса создания и рендеринга компьютерной графики. ЧАЛЕРМПХОН СРИСАНГ/Shutterstock

Как и материнская плата, видеокарта представляет собой печатную плату, на которой размещены процессор и видеопамять. Он также имеет микросхему системы ввода/вывода (BIOS), которая сохраняет настройки карты и выполняет диагностику памяти, ввода и вывода при запуске.

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

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

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

  • Сглаживание всей сцены (FSAA), которое сглаживает края трехмерных объектов.
  • Анизотропная фильтрация (AF), которая делает изображения более четкими.
  • Физика в реальном времени и эффекты частиц
  • Многоэкранные дисплеи
  • Видео с высокой частотой кадров
  • Видео сверхвысокой четкости с миллионами пикселей.
  • Вычисления с ускорением GPU

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

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

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

Графические карты прошли долгий путь с тех пор, как IBM представила первую из них в 1981 году. Эта карта, получившая название адаптера монохромного дисплея (MDA), обеспечивала отображение только текста зеленого или белого текста на черном экране. Теперь и видеокарты, и встроенные чипы могут легко передавать сигнал HD (1920 x 1080 пикселей) через кабель HDMI или DisplayPort. Автономные карты часто воспроизводят видео в формате Ultra HD 4K (3840 x 2160), а на графических процессорах с более высокими характеристиками доступно еще более высокое разрешение.

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

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

Диаграмма показывает разницу между блоком управления/логикой ЦП и GPU

Разница между CPU и GPU

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

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

ЦП и обработка GPU

Хотя графические процессоры могут обрабатывать данные на несколько порядков быстрее, чем ЦП, благодаря массовому параллелизму, графические процессоры не так универсальны, как ЦП. ЦП имеют большие и широкие наборы инструкций, управляя каждым вводом и выводом компьютера, чего не может сделать графический процессор. В серверной среде может быть от 24 до 48 очень быстрых ядер ЦП. Добавление от 4 до 8 графических процессоров на тот же сервер может обеспечить до 40 000 дополнительных ядер. Хотя отдельные ядра ЦП быстрее (измеряется по тактовой частоте ЦП) и умнее, чем отдельные ядра ГП (измеряется по доступным наборам инструкций), само количество ядер ГП и огромный объем параллелизма, который они предлагают, не ограничиваются одним -Разница в тактовой частоте ядра и ограниченный набор инструкций.

ГП лучше всего подходят для повторяющихся и высокопараллельных вычислительных задач. Помимо рендеринга видео, графические процессоры преуспевают в машинном обучении, финансовом моделировании и моделировании рисков, а также во многих других типах научных вычислений. В то время как в прошлые годы графические процессоры использовались для майнинга криптовалют, таких как Биткойн или Эфириум, графические процессоры, как правило, больше не используются в больших масштабах, уступая место специализированному оборудованию, такому как программируемые сетевые массивы (FPGA), а затем специализированные интегральные схемы (ASIC). .

Примеры вычислений CPU-GPU

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

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

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

Поддерживает ли HEAVY.AI CPU и GPU?

Да. Инициатива GPU Open Analytics (GOAI) и ее первый проект, GPU Data Frame (GDF, теперь cudf), стали первым общеотраслевым шагом к открытой экосистеме для сквозных вычислений на GPU. Теперь известный как проект RAPIDS, основная цель которого — обеспечить эффективную связь внутри графического процессора между различными процессами, работающими на графическом процессоре.

По мере распространения cudf в экосистеме обработки данных пользователи смогут беспрепятственно переносить процесс, работающий на графическом процессоре, в другой процесс, не копируя данные в центральный процессор. Благодаря удалению промежуточных сериализаций данных между инструментами обработки данных на GPU время обработки значительно сокращается. Более того, поскольку cudf использует функции межпроцессного взаимодействия (IPC) в API программирования Nvidia CUDA, процессы могут передавать дескриптор данных вместо копирования самих данных, обеспечивая передачу практически без дополнительных затрат. Конечным результатом является то, что GPU становится первоклассным вычислительным гражданином, а процессы могут взаимодействовать так же легко, как и процессы, работающие на CPU.

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

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

ЦП (центральный процессор) называют мозгом ПК. GPU — его душа. Однако за последнее десятилетие графические процессоры вышли за рамки ПК.

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

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

Что такое графический процессор?

CPU vs GPU: Что

В чем разница между CPU и GPU?

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

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

ГП, напротив, разбивают сложные проблемы на тысячи или миллионы отдельных задач и решают их одновременно.

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

ЦП и ГП

ЦПГП
Центральный процессорГрафика Процессор
Несколько ядерМного ядер
Низкая задержкаВысокая производительность
Хорошо для последовательной обработкиХорошо для параллельной обработки
Может выполнять несколько операций одновременноМожет выполнять тысячи операций одновременно

Архитектурно ЦП состоит всего из нескольких ядер с большим объемом кэш-памяти, которые могут обрабатывать несколько программных потоков одновременно. Напротив, GPU состоит из сотен ядер, которые могут одновременно обрабатывать тысячи потоков.

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

Для графических процессоров компьютерная графика — первое из многих приложений

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

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

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

ЦП и конец закона Мура

Поскольку закон Мура перестал действовать, GPU, изобретенные NVIDIA в 1999 году, появились как раз вовремя.

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

Графические процессоры: ключ к искусственному интеллекту, компьютерному зрению, суперкомпьютерам и многому другому

За последнее десятилетие это стало ключом к растущему числу приложений.

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

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

Искусственный интеллект и игры: глубокое обучение на базе графического процессора завершает цикл

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

Что

Графические процессоры завершают круг: тензорные ядра, встроенные в графические процессоры NVIDIA Turing, ускоряют работу искусственного интеллекта, который, в свою очередь, теперь используется для ускорения игр.

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

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

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

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

Здесь вы можете увидеть скриншот небольшой программы на C++ под названием Triangle.exe с вращающимся треугольником на основе OpenGL API.

введите здесь описание изображения

По общему признанию, это очень простой пример, но я думаю, что он применим и к другим операциям с графическими картами.

Мне было просто любопытно, и я хотел узнать весь процесс, начиная с двойного щелчка на файле Triangle.exe в Windows XP и заканчивая тем, что на мониторе появляется вращающийся треугольник. Что происходит, как взаимодействуют CPU (который сначала обрабатывает .exe) и GPU (который в итоге выводит треугольник на экран)?

Я предполагаю, что в отображении этого вращающегося треугольника в первую очередь участвуют следующие аппаратные и программные средства:

  • Жесткий диск
  • Системная память (RAM)
  • ЦП
  • Видеопамять
  • Графический процессор
  • ЖК-дисплей
  • Операционная система
  • API DirectX/OpenGL
  • Драйвер Nvidia

Кто-нибудь может объяснить процесс, может быть, с какой-нибудь блок-схемой для иллюстрации?

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

Я почти уверен, что многие люди, которые даже называют себя ИТ-специалистами, не смогли бы правильно описать этот процесс.

7 ответов 7

Я решил немного написать об аспекте программирования и о том, как компоненты взаимодействуют друг с другом. Возможно, это прольет свет на некоторые области.

Презентация

Что нужно для того, чтобы на экране появилось то единственное изображение, которое вы разместили в своем вопросе?

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

Но прежде чем мы сможем что-либо нарисовать, нам сначала нужно запустить строительные леса. Мы увидим почему позже:

Так что же это сделало?

В этом примере мы будем использовать OpenGL. Теперь ваш интерфейс к драйверу — это то, что дает вам все инструменты, необходимые для того, чтобы заставить вашу программу общаться с видеокартой (или драйвером, который затем общается с на карточку).

Этот интерфейс должен предоставить вам определенные инструменты. Эти инструменты имеют форму API, который вы можете вызывать из своей программы.

Этот API используется в приведенном выше примере. Давайте посмотрим поближе.

Строительные леса

Прежде чем вы действительно сможете рисовать, вам нужно выполнить настройку. Вы должны определить свое окно просмотра (область, которая фактически будет визуализирована), вашу перспективу (камера в ваш мир), какое сглаживание вы будете использовать (чтобы сгладить края вашего треугольника). ).

Но мы не будем на это смотреть. Мы просто взглянем на то, что вам придется делать в каждом кадре. Нравится:

Очистка экрана

Графический конвейер не будет очищать экран для вас каждый кадр. Вы должны будете сказать это. Почему? Вот почему:

введите здесь описание изображения

Если вы не очистите экран, вы будете просто рисовать поверх него в каждом кадре. Вот почему мы вызываем glClear с установленным битом GL_COLOR_BUFFER_BIT. Другой бит ( GL_DEPTH_BUFFER_BIT ) указывает OpenGL очистить буфер depth. Этот буфер используется для определения того, какие пиксели находятся впереди (или позади) других пикселей.

Трансформация

введите здесь описание изображения


Источник изображения

Преобразование — это часть, в которой мы берем все входные координаты (вершины нашего треугольника) и применяем нашу матрицу ModelView. Это матрица, которая объясняет, как наша модель (вершины) поворачивается, масштабируется и перемещается (перемещается).

Далее мы применяем нашу матрицу проекции. Это перемещает все координаты так, чтобы они правильно смотрели на нашу камеру.

Теперь мы снова трансформируем нашу матрицу Viewport. Мы делаем это, чтобы масштабировать нашу модель до размера нашего монитора. Теперь у нас есть набор вершин, готовых к рендерингу!

Мы вернемся к преобразованию чуть позже.

Рисование

Чтобы нарисовать треугольник, мы можем просто указать OpenGL начать новый список треугольников, вызвав glBegin с константой GL_TRIANGLES.
Есть и другие формы, которые вы можете рисовать. Как треугольная полоса или треугольный веер. В первую очередь это оптимизация, так как для отрисовки одинакового количества треугольников требуется меньше связи между ЦП и ГП.

После этого мы можем предоставить список наборов из 3 вершин, которые должны составлять каждый треугольник. Каждый треугольник использует 3 координаты (поскольку мы находимся в 3D-пространстве). Кроме того, я также задаю цвет для каждой вершины, вызывая glColor3f перед вызовом glVertex3f .

Оттенок между тремя вершинами (тремя углами треугольника) вычисляется OpenGL автоматически. Он будет интерполировать цвет по всей поверхности многоугольника.

Взаимодействие

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

Это становится намного сложнее, когда вы хотите начать взаимодействовать со своей 3D-сценой.

Сначала вы должны четко знать, на каком пикселе пользователь щелкнул окно. Затем, принимая во внимание вашу перспективу, вы можете рассчитать направление луча от точки щелчка мыши до вашей сцены. Затем вы можете рассчитать, пересекается ли какой-либо объект в вашей сцене с этим лучом. Теперь вы знаете, щелкнул ли пользователь объект.

Итак, как заставить его вращаться?

Преобразование

Мне известны два типа трансформаций, которые обычно применяются:

  • Матричное преобразование
  • Преобразование на основе костей

Разница в том, что кости влияют на отдельные вершины. Матрицы всегда влияют на все нарисованные вершины одинаково. Давайте рассмотрим пример.

Пример

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

Если я хочу повернуть его сейчас, я могу либо сам посчитать (на процессоре), либо просто вызвать glVertex3f с другими координатами (которые повернуты).Или я мог бы позволить графическому процессору сделать всю работу, вызвав glRotatef перед рисованием:

количество, конечно, просто фиксированное значение. Если вы хотите анимировать, вам придется отслеживать объем и увеличивать его с каждым кадром.

Итак, подождите, что случилось со всеми разговорами о матрицах ранее?

В этом простом примере нам не нужно заботиться о матрицах. Мы просто вызываем glRotatef, и он обо всем позаботится за нас.

glRotate производит поворот на угол в градусах вокруг вектора x y z . Текущая матрица (см. glMatrixMode) умножается на матрицу вращения с произведением, заменяющим текущую матрицу, как если бы glMultMatrix вызывалась со следующей матрицей в качестве аргумента:

x 2 ⁡ 1 - c + cx ⁢ y ⁡ 1 - c - z ⁢ sx ⁢ z ⁡ 1 - c + y ⁢ s 0 y ⁢ x ⁡ 1 - c + z ⁢ sy 2 ⁡ 1 - c + cy ⁢ z ⁡ 1 - c - x ⁢ s 0 x ⁢ z ⁡ 1 - c - y ⁢ sy ⁢ z ⁡ 1 - c + x ⁢ sz 2 ⁡ 1 - c + c 0 0 0 0 1

Ну, спасибо за это!

Заключение

Очевидным становится то, что об OpenGL много говорят. Но это ничего нам не говорит. Где связь?

Единственное, что OpenGL сообщает нам в этом примере, это когда это будет сделано. Каждая операция займет определенное время. Некоторые операции занимают невероятно много времени, другие выполняются невероятно быстро.

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

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

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

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

Затем мы можем "рендерить" результат наших вычислений (в виде новых цветов) в новую текстуру.

Вот как вы можете заставить GPU работать на вас другими способами. Я предполагаю, что CUDA работает аналогично этому аспекту, но у меня никогда не было возможности поработать с ним.

Мы действительно лишь слегка коснулись всей темы. Программирование 3D-графики — адский зверь.

Трудно понять, чего именно вы не понимаете.

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

Информация состоит из программного обеспечения, необходимого для работы графического процессора. Это программное обеспечение связано с драйвером, после чего драйвер распределяет обязанности между процессором и графическим процессором (запуская части своего кода на обоих устройствах).

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

Спасибо за объяснение. По сути, я не понял, как набор инструкций ЦП взаимодействует с набором инструкций графического процессора, но, очевидно, эту часть выполняет драйвер. Именно это я имел в виду под слоями абстракции.

Набор инструкций процессора не задействован. Драйвер и среда выполнения компилируют ваши CUDA, OpenGL, Direct3D и т. д. в собственные программы/ядра графического процессора, которые затем также загружаются в память устройства. Затем буфер команд ссылается на них, как и на любой другой ресурс.

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

@sidran32: Например, в архитектуре nVidia Kepler ядра, потоки и события создаются программным обеспечением, работающим на графическом процессоре, а не (обычно) на центральном процессоре. Программное обеспечение на стороне графического процессора также управляет RDMA.Все это программное обеспечение загружается в память графического процессора драйвером и работает как «мини-ОС» на графическом процессоре, который обрабатывает сторону графического процессора взаимодействующей пары ЦП/ГП.

@DavidSchwartz Я забыл о вычислительных задачах графического процессора. Тем не менее, во всяком случае, в реализации они по-прежнему ведут себя аналогично шейдерам. Однако я бы не назвал ее «мини-ОС», поскольку она не имеет той же функциональности, которая обычно ассоциируется с ОС. Это по-прежнему очень специализированное программное обеспечение, поскольку графический процессор не похож на центральный процессор (по уважительной причине).

Мне было просто любопытно, и я хотел узнать весь процесс, начиная с двойного щелчка по файлу Triangle.exe в Windows XP и заканчивая тем, что я вижу вращающийся треугольник на мониторе. Что происходит, как взаимодействуют CPU (который сначала обрабатывает .exe) и GPU (который в итоге выводит треугольник на экран)?

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

Какой интерфейс между CPU и GPU?

С помощью драйвера ЦП может обмениваться данными с графической картой через функции материнской платы, такие как PCI, и отправлять ей команды для выполнения некоторых инструкций графического процессора, доступа/обновления памяти графического процессора, загрузки кода для выполнения на графическом процессоре и т. д. .

Но вы не можете напрямую обращаться к оборудованию или драйверу из кода; поэтому это должно происходить через такие API, как OpenGL, Direct3D, CUDA, HLSL, Cg. В то время как первые выполняют инструкции графического процессора и/или обновляют память графического процессора, вторые фактически будут выполнять код на графическом процессоре, поскольку они являются языками физики/шейдеров.

Зачем запускать код на GPU, а не на CPU?

Хотя центральный процессор хорошо справляется с нашими повседневными программами для рабочих станций и серверов, никто особенно не задумывался о всей этой блестящей графике, которую вы видите в современных играх. В те времена существовали программные рендереры, которые делали трюки с некоторыми 2D и 3D вещами, но они были очень ограниченными. Итак, вот где GPU вступил в игру.

Графический процессор оптимизирован для одного из самых важных вычислений в графике — манипуляций с матрицами. В то время как центральный процессор должен вычислять каждое умножение в матричных манипуляциях одно за другим (позже такие вещи, как 3DNow! и SSE, догнали его), графический процессор может выполнять все эти умножения одновременно! Параллелизм.

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

Как эти инструкции GPU/память/код отображают графику?

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

Давайте приведем пример, когда вы хотели где-то нарисовать спрайт крови (изображение); во-первых, сама текстура дерева загружается в память графического процессора, что позволяет легко перерисовывать ее по желанию. Затем, чтобы действительно нарисовать спрайт где-то, мы можем транслировать спрайт, используя вершины (помещая его в правильное положение), растрировать его (превращая его из 3D-объекта в пиксели) и обновлять буфер кадра. Чтобы получить лучшее представление, вот блок-схема конвейера OpenGL из Википедии:


Это основной смысл всей графической идеи, дополнительные исследования — это домашнее задание для читателя.

Читайте также: