Скажем, я использую компьютер, любой типичный современный компьютер более или менее. Драйвер устройства отвечает за все, что я вижу на своем экране, в том числе и при вводе этого текста, экран обновляется (это, конечно, в рамках операционной системы, такой как Windows).
Давайте возьмем это до уровня, когда аппаратное обеспечение не заботится о том, есть ядро или нет, и просто принимает инструкции.
По сути, как графические процессоры «знают», как именно все делать? Управляет ли драйвер в основном каждой мелкой, внутренней или аппаратной функцией уровня схемы, возможной или необходимой для вычисления двоичных данных для отображения с использованием специальных инструкций, которые предоставляет драйвер?
Если да, использует ли GPU «специальный» язык или «сборку» для понимания команд, отправляемых ему, как процессор?
У меня слишком много пробелов в моих знаниях, и есть эта неприятная «загадка» за графическими процессорами и доступом к ним напрямую через аппаратное обеспечение.
Например, GPU и CPU должны иметь возможность каким-либо образом соединяться, чтобы можно было получить доступ к GPU через сборку CPU и реализовать правильные шины данных / адресов. Поставщик устройства не может сделать невозможным доступ к графическому процессору вне драйвера, поскольку драйвер также является скомпилированным кодом, а графический процессор, как программируемая схема, должен работать с двоичными инструкциями.
Я задавал эти типы вопросов, и они быстро удалялись без ответа, почему на многих сайтах, так в чем же здесь большая загадка / секрет? Это часть аппаратного обеспечения на материнской плате, доступ к которой, как и любой другой.
Так что на самом деле ... если предположить, что это "нормальный" вопрос в отношении программного и аппаратного обеспечения, любой может получить прямой доступ к графическому процессору без специальных файлов производителя, поскольку эти файлы не являются волшебными.
Так как же «программировать» графические процессоры с точки зрения аппаратного обеспечения на аппаратном уровне?
Ответы:
Нет, устройство имеет свои собственные интегральные схемы, которые управляют всеми аспектами функционирования устройства на аппаратном уровне, и они взаимодействуют с центральным процессором, который координирует аспекты на устройстве, а также предоставляют интерфейс программирования более высокого уровня, который можно использовать. для доступа, чтения, записи и управления устройством.
Да и нет. Как и большинство устройств, видеокарты используют стандарты для упрощения вопросов. Они используют такие стандарты, как VESA для доступа к обычным функциям, таким как видео при загрузке, или CUDA для доступа к функциям программирования на GPU. Кроме того, программы могут получать доступ к нестандартным или зависящим от устройства функциям напрямую, используя машинный код (часто С, скомпилированный для ассемблера) в сочетании с программной документацией устройства (которая доступна на веб-сайте адаптера).
Драйверы имеют прямой доступ к устройству, поэтому у них есть особый доступ (обычные программы уровня пользователя не имеют доступа к оборудованию напрямую в Vista + по соображениям безопасности и стабильности). Доступ к устройству осуществляется через порты, DMA ( прямой доступ к памяти ) и отображение памяти .
Драйвер может читать и записывать устройство с помощью регулярных инструкций процессора, получая доступ к отображенным в памяти портам и тому подобное. В качестве простого для понимания примера вы можете поместить символ на экран в текстовом режиме, записав его в «память» по адресу B8000. Этот адрес был не ОЗУ, а, скорее, он был сопоставлен с памятью видеокарты, поэтому запись на него означала бы запись на экран. Аналогично, вы можете записать на экран, поместив символ, который вы хотите записать, в
AL
реестр,0x09
вAH
регистр, а затем вызвать прерывание BIOS0x10
. Более продвинутые функции не отличаются; Вы можете читать и записывать память адаптера, вызывать функции на его микросхеме и т. д., используя любой интерфейс, который устройство предоставляет, и документирует.Только для функций, которые соответствуют стандартам, но для всего остального (т. Е. Более продвинутых вещей), вам нужно будет обратиться к программным документам производителя.
Через несколько слоев:
источник
Я не совсем гений в компьютерной архитектуре, но я постараюсь рассмотреть ваш вопрос по точкам, насколько мне известно.
Это правда, главным образом потому, что прямое взаимодействие с графическим процессором нелегко реализовать. Отсюда и разработка графических фреймворков, таких как DirectX и OpenGL.
Это удобное определение из Википедии объясняет это более подробно:
GPU - это микропроцессоры. Как таковые они обрабатывают. Они обрабатывают данные, которые поступают из ЦП (то есть положение элементов) на правильный дисплей. Они «знают», как делать все, потому что они изготовлены таким образом, и большая группа людей договорилась о надлежащих способах отправки данных в и из графического процессора.
Думайте о драйвере дисплея как о буфере или прокси. Представьте, что вы окно программы, и пользователь перемещает вас вверх. Вы просите GPU обновить дисплей. Но поскольку графический процессор говорит на клингоне, а вы говорите на вулканском , водитель получает вашу команду, переводит ее в графический процессор, который, в свою очередь, выполняет то, что вы приказали.
Из Википедии :
Есть этот пример, и помните, что отдельные производители (NVIDIA, ATI) имеют свои собственные наборы инструкций.
Кроме того, существует OpenCL и множество других способов, в некотором роде, напрямую программировать инструкции для GPU.
Все это должно в какой-то степени ответить на ваш вопрос.
источник