Как инструкции драйвера устройства программируют графический процессор?


9

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

Давайте возьмем это до уровня, когда аппаратное обеспечение не заботится о том, есть ядро ​​или нет, и просто принимает инструкции.

По сути, как графические процессоры «знают», как именно все делать? Управляет ли драйвер в основном каждой мелкой, внутренней или аппаратной функцией уровня схемы, возможной или необходимой для вычисления двоичных данных для отображения с использованием специальных инструкций, которые предоставляет драйвер?

Если да, использует ли GPU «специальный» язык или «сборку» для понимания команд, отправляемых ему, как процессор?

У меня слишком много пробелов в моих знаниях, и есть эта неприятная «загадка» за графическими процессорами и доступом к ним напрямую через аппаратное обеспечение.

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

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

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

Так как же «программировать» графические процессоры с точки зрения аппаратного обеспечения на аппаратном уровне?


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

Я не читаю справочный центр.

Не возражаете, если я спрошу, почему нет?
Доктор Рейхард

Потому что лучше провести время, размышляя, пытаясь решить и ответить на мой вопрос «ОК» в его нынешнем виде.

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

Ответы:


8

По сути, как графические процессоры «знают», как именно все делать? Управляет ли драйвер в основном каждой мелкой, внутренней или аппаратной функцией уровня схемы, возможной или необходимой для вычисления двоичных данных для отображения с использованием специальных инструкций, которые предоставляет драйвер?

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

Если да, использует ли GPU «специальный» язык или «сборку» для понимания команд, отправляемых ему, как процессор?

Да и нет. Как и большинство устройств, видеокарты используют стандарты для упрощения вопросов. Они используют такие стандарты, как VESA для доступа к обычным функциям, таким как видео при загрузке, или CUDA для доступа к функциям программирования на GPU. Кроме того, программы могут получать доступ к нестандартным или зависящим от устройства функциям напрямую, используя машинный код (часто С, скомпилированный для ассемблера) в сочетании с программной документацией устройства (которая доступна на веб-сайте адаптера).

У меня слишком много пробелов в моих знаниях, и есть эта неприятная «загадка» за графическими процессорами и доступом к ним напрямую через аппаратное обеспечение.

Драйверы имеют прямой доступ к устройству, поэтому у них есть особый доступ (обычные программы уровня пользователя не имеют доступа к оборудованию напрямую в Vista + по соображениям безопасности и стабильности). Доступ к устройству осуществляется через порты, DMA ( прямой доступ к памяти ) и отображение памяти .

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

Драйвер может читать и записывать устройство с помощью регулярных инструкций процессора, получая доступ к отображенным в памяти портам и тому подобное. В качестве простого для понимания примера вы можете поместить символ на экран в текстовом режиме, записав его в «память» по адресу B8000. Этот адрес был не ОЗУ, а, скорее, он был сопоставлен с памятью видеокарты, поэтому запись на него означала бы запись на экран. Аналогично, вы можете записать на экран, поместив символ, который вы хотите записать, в ALреестр, 0x09в AHрегистр, а затем вызвать прерывание BIOS 0x10. Более продвинутые функции не отличаются; Вы можете читать и записывать память адаптера, вызывать функции на его микросхеме и т. д., используя любой интерфейс, который устройство предоставляет, и документирует.

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

Только для функций, которые соответствуют стандартам, но для всего остального (т. Е. Более продвинутых вещей), вам нужно будет обратиться к программным документам производителя.

Так как же «программировать» графические процессоры с точки зрения аппаратного обеспечения на аппаратном уровне?

Через несколько слоев:

  1. Твердотельные компоненты, такие как транзисторы и тому подобное
  2. ASIC низкого уровня
  3. Бортовой процессор (ы) и чипсеты
  4. Низкоуровневые программные интерфейсы (сборка)
  5. Интерфейсы программирования более высокого уровня (DirectX, OpenGL)
  6. Язык программирования высокого уровня (C ++, C #, Python и т. Д.)

1
записка о «голом металле»; в случае, если вы слышите, о чем говорит большинство разработчиков игр, они жалуются на то, что им приходится использовать абстракции высокого уровня, такие как DirectX / OpenGL, вместо того, чтобы писать код, который компилируется в язык компьютера. см. здесь информацию о языке ассемблера, используемом графическими процессорами FERMI от Nvidia code.google.com/p/asfermi. Обратите внимание, что даже CUDA находится на языке высокого уровня (PTX), который компилируется в машинный код, так что функции, которые вы программируете в CUDA, могут не может быть таким же, как скомпилированный вывод.
Фрэнк Томас

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

2

Я не совсем гений в компьютерной архитектуре, но я постараюсь рассмотреть ваш вопрос по точкам, насколько мне известно.


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

Это правда, главным образом потому, что прямое взаимодействие с графическим процессором нелегко реализовать. Отсюда и разработка графических фреймворков, таких как DirectX и OpenGL.

Это удобное определение из Википедии объясняет это более подробно:

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


По сути, как графические процессоры «знают», как именно все делать? Управляет ли драйвер в основном каждой мелкой, внутренней или аппаратной функцией уровня схемы, возможной или необходимой для вычисления двоичных данных для отображения с использованием специальных инструкций, которые предоставляет драйвер?

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

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

Если да, использует ли GPU «специальный» язык или «сборку» для понимания команд, отправляемых ему, как процессор?


Из Википедии :

Язык ассемблера ARB - это низкоуровневый язык затенения, который можно охарактеризовать как язык ассемблера Он был создан OpenGL Architecture Review Board (ARB) для стандартизации инструкций графического процессора, управляющих аппаратным графическим конвейером.

Есть этот пример, и помните, что отдельные производители (NVIDIA, ATI) имеют свои собственные наборы инструкций.

Кроме того, существует OpenCL и множество других способов, в некотором роде, напрямую программировать инструкции для GPU.

Все это должно в какой-то степени ответить на ваш вопрос.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.