Есть ли у Intel отдельный набор инструкций для своего графического процессора?

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

  1. Обычно встроенные графические процессоры встроены в ЦП?
  2. Есть ли у Intel отдельный набор инструкций для своего графического процессора? если да, то есть ли документ?
  3. Инструкции GPU сильно отличаются от CPU? например, есть ли у графических процессоров инструкции shift, add, load, store? Какие еще инструкции у них есть, которых нет у обычных процессоров?
  4. Есть ли разница между набором инструкций/конвейером встроенного графического процессора и выделенного? или разница только в количестве дополнительных ядер и выделенной оперативной памяти?
  5. Как на машине с выделенным графическим процессором сгенерированные инструкции из кода C++ OpenGL выполняются на графическом процессоре, а не на обычном процессоре?

person Community    schedule 07.05.2020    source источник
comment
Ядра графического процессора не являются ядрами x86 совсем, это полностью отдельный набор инструкций. Встроенный графический процессор находится на том же физическом кремниевом чипе, что и ядра ЦП, например. на Intel подключены к той же кольцевой шине, что и ядра, контроллеры памяти и системный агент. См. anandtech.com/show/3922/ для схемы четырехъядерного Sandybridge. realworldtech.com/sandy-bridge/8 является частью подробного описания, в котором основное внимание уделяется на ядрах IA (архитектура Intel = x86 = ядра ЦП)   -  person Peter Cordes    schedule 07.05.2020
comment
И да, разные поставщики графических процессоров имеют свой собственный набор инструкций. Вот почему шейдеры OpenGL в программе должны быть скомпилированы драйвером графического процессора для конкретного графического процессора, который будет их запускать, с переносимого языка.   -  person Peter Cordes    schedule 07.05.2020
comment
Итак, что произойдет, если я скомпилирую что-то на своем ноутбуке и запущу его на другой Intel x64 с выделенной nvidia? он не будет использовать nvidia, я думаю?   -  person    schedule 07.05.2020
comment
Графические драйверы компилируют шейдерные программы во время выполнения при каждом запуске. Вот как игры и тому подобное могут распространять единую версию программы, которая работает на любой системе OpenGL, в том числе на будущих графических процессорах, которых не существовало, когда игра была написана. И наоборот, как графические драйверы могут выставить стабильный переносимый API/ABI.   -  person Peter Cordes    schedule 07.05.2020
comment
Скажем, я пишу код CPP с помощью opengl и компилирую. Я предполагаю, что сгенерированный код выполняет системные вызовы во время выполнения, которые передаются драйверами графики, которые затем генерируют фактические инструкции для выполнения графической работы?   -  person    schedule 07.05.2020
comment
Даже не системные вызовы, а просто библиотечные вызовы функций OpenGL, реализация которых зависит от графического драйвера. Но да.   -  person Peter Cordes    schedule 07.05.2020
comment
Итак, каждый графический драйвер, такой как Intel, AMD, Nvidia и т. д., должен иметь свою собственную реализацию Opengl? есть и другие альтернативы opengl, значит ли это, что каждый драйвер должен реализовать их все?   -  person    schedule 07.05.2020


Ответы (1)


Полный справочник оборудования

Полную документацию по графическому контроллеру Intel можно найти по адресу 01.org:

Спецификация оборудования — PRM Опубликовано: Paul Parenteau Последнее изменение: 15 июня 2020 г.

Ответ на вопрос 2: да, существуют отдельные инструкции по сборке, разработанные ниже (от Введение в сборку GEN)

Общая форма сборки графического процессора Intel

Обычно все инструкции имеют следующий вид:

[(pred)] opcode (exec-size|exec-offset) dst src0 [src1] [src2]

(pred) — необязательный предикат. Мы собираемся пропустить это сейчас.

opcode — это символ инструкции, такой как add или mov (у нас есть полная таблица кодов операций ниже.

exec-size — ширина SIMD-инструкции, которая в нашей архитектуре может быть равна 1, 2, 4, 8 или 16. При компиляции SIMD32 обычно две инструкции размером выполнения 8 или 16 группируются в одну.

exec-offset — это часть, которая сообщает ЕС, из какой части регистров ARF следует читать или записывать, например. (8|M24) обращается к битам 24-31 маски выполнения. При генерировании кода SIMD16 или SIMD32, как показано ниже:

mov  (8|M0)   r11.0<1>:q   r5.0<8;8,1>:d   // id:1
mov  (8|M8)   r13.0<1>:q   r6.0<8;8,1>:d   // id:1
mov  (8|M16)  r15.0<1>:q   r9.0<8;8,1>:d   // id:1
mov  (8|M24)  r17.0<1>:q   r10.0<8;8,1>:d  // id:1

(мов инструкция по сборке SIMD32)

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

dst - регистр назначения

src0 — исходный регистр

src1 — необязательный исходный регистр. Обратите внимание, что это также может быть непосредственное значение, например 0x3F000000:f (0,5) или 0x2A:ud (42).

src2 — необязательный исходный регистр.

Общий регистровый файл (GRF) Регистры

Каждый поток имеет выделенное пространство из 128 регистров, от r0 до r127. Каждый регистр имеет размер 256 бит или 32 байта.

Файл регистров архитектуры (ARF) Регистры

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

Регистры файла регистрации архитектуры (ARF)

Доступные GEN (общие) инструкции по сборке

Доступные GEN (общие) инструкции по сборке Доступные инструкции по сборке GEN (общие) 2

person Soleil    schedule 19.01.2021