9

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

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

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

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

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

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

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

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

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

2 ответа2

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 и т.д.)
2

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


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

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

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

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


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

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

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

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


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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .