Як CPU спілкується з GPU перед завантаженням драйверів? [дублікат]


24

Як я розумію, у графічних процесорів є свої набори інструкцій, інструкції яких генеруються графічними драйверами. Потім інструкції GPU надсилаються до GPU. Отже, як працює графічне спілкування перед завантаженням драйверів? Чи є якісь базові інструкції, які GPU повинні реалізувати як мінімум для того, щоб комп'ютер міг виконувати основні завдання з відображення?


Відповіді:


34

"Чи є якісь базові інструкції ...?" Так, саме. Усі графічні процесори зобов'язані реалізувати один з декількох простих інтерфейсів - вони занадто примітивні, щоб їх можна було назвати "наборами інструкцій" - які програмні засоби платформи ("BIOS" або "UEFI") та драйвери, що входять до ОС, знають, як спілкуватися. . Звичайним вибором "простого інтерфейсу" в наші дні є "VGA" ("Video Graphics Array"), інтерфейс рівня реєстрації, спочатку визначений для відеокарт цього стандарту. (Зараз 30+ років!)

Наприклад, якщо Диспетчер пристроїв у системі Windows ідентифікує графічну карту як "Базовий відеоадаптер Майкрософт", ОС не змогла знайти конкретний драйвер для карти і замість цього завантажила VGA-сумісний драйвер.

Ну, технічно Windows завжди завантажує цей драйвер (щоб він міг відображати, наприклад, екрани ходу завантаження), потім (досить пізно в завантаженні) ідентифікує та завантажує "справжній" драйвер для вашої відеокарти.

Стандарт VGA підтримує лише кілька графічних режимів з низькою роздільною здатністю та текстовими режимами, і не передбачає того, що я б назвав "запущеними програмами" або навіть "інструкціями" на графічному процесорі. По суті, програмне забезпечення системи або "базовий драйвер відео" просто переводить його в потрібний режим і потім записує біти в бітову карту; біти в растровій карті безпосередньо відповідають пікселям на екрані. Будь-яка арифметика, яку потрібно виконати для малювання ліній чи кривих, виконується в процесорі. Це дуже низький і повільний спосіб показувати речі на екрані. Але цього достатньо для дисплеїв із простих взаємодій із прошивкою, для встановлення ОС та ранніх екранів завантаження тощо.

Вікіпедія: Масив відео графіки


1
Повна ситуація складна. Найперші карти "VGA" були дійсно такими обмеженими. Тривалий час Windows NT вимагала підтримки 800x600, але так, всього 16 кольорів. Це виглядало досить жахливо! Дивіться статтю Вікіпедії, яку я пов’язав.
Джеймі Ханрахан

9
Windows, швидше за все, використовує VESA BIOS Extentions (VBE) для свого основного адаптера. VBE досить широко підтримується і дозволяє отримати 16-24 бітові кольори та до 1600x1200 пікселів.
8bittree

3
Це не було б розширенням VESA BIOS, оскільки Windows категорично не викликає код BIOS / UEFI ні за що, після того, як будуть виконані самі ранні етапи завантаження.
Джеймі Ханрахан

2
Я бачив деякі комп’ютери, включаючи свій ноутбук, де завантажувальний екран Windows "крутиться крапками" запускає надзвичайно низьку роздільну здатність (я б сказав, 320-кольоровий режим VGA), а потім швидко переходить на більш високу роздільну здатність.
Артелій

1
Навіть 800x600 у 16 ​​кольорах виходить за межі можливостей VGA. VGA розміщений на 640x480 16 кольорах. Однак виробники графічних чіпів вийшли за рамки цього і додадуть режими "SuperVGA" aka SVGA, які б збільшували кольори та роздільну здатність, а також мали власні режими власності. VESA придумала стандартний спосіб доступу до цих фірмових режимів, але це було приблизно в той час, коли ПК почав діяти в основному на GUI, і тому драйвери були хорошим вибором. Було також, коли почалося додавання 3D-прискорень. Отже, хоча більшість карт стали сумісними з VESA, про це ніхто не говорив.
trlkly

16

Я спробую вияснити "вуду" за всім цим, пояснивши, як працювало старе обладнання. Сучасні графічні процесори не працюють так, але вони імітують інтерфейс CPU-графічної карти.

тл; д-р

Графічні чіпи / картки у 80-х та на початку 90-х мали надзвичайно швидко виробляти вихід (відносно тактової частоти), щоб вони не виконували вказівки, а мали фіксовану схему. Вони просто висмоктували дані з оперативної пам’яті, коли вони йшли, тож процесору просто потрібно було скинути дані в оперативну пам’ять в потрібному місці, а графічний чіп забрав би їх і викинув на екран. Процесор може також встановити різні змінні конфігурації на графічному чіпі.

Деталі:

У 80-х роках домашні комп'ютери мали справді «німий» графічний чіп, який мав декілька фіксованих форм поведінки. Це матиме найбільше сенс, якщо я пройду трубопровід назад.

CRT-монітори

Цим моніторам потрібні були аналогові входи. Іншими словами, більша напруга = яскравіший вихід. Кольорові монітори мали 3 канали (червоний, зелений та синій (або, наприклад, YUV або YIQ ) ). Ці напруги регулювали силу електронного променя. Прості речі.

CRT-монітори буквально використовували електромагніти для відхилення пучка електронів зліва направо, потім знову запускайте трохи нижче та йдіть ліворуч праворуч тощо, зверху вниз. Потім поверніться до верху і повторіть.

ЦАП

Графічні мікросхеми мали перетворювач "цифровий в аналоговий" (дуже поширений електричний компонент ). Це перетворювало цифрові значення (наприклад, 2, 4 або 8 біт) у напруги, які могли б подаватися на монітор.

Сканування

Графічні мікросхеми повинні були «йти в ногу» з пучком електронів, надсилаючи потрібне значення в ЦАП, щоб він міг виводити відповідну напругу в потрібний час. (Для цього використовувались годинники, в які я не заходжу.) Тут не було часу виконувати інструкції. Все було провідним і займало невелику, фіксовану кількість циклів годин.

Режими відео

Ранні чіпи були не дуже швидкими і мали обмежену оперативну пам'ять. Через це вони мали тенденцію дозволити вибирати різні режими та інші параметри конфігурації, наприклад, колір тла, вибір шрифту, місце розташування та розмір курсору, вибір палітри та спрайт. Більшість пропонували режим "тільки для символів" з високою роздільною здатністю та режими "піксель на піксель" з меншою роздільною здатністю.

Три важливих режиму VGA:

  • 16 (кольоровий) кольоровий 80х25 текстовий режим (це по суті так виглядає екран завантаження BIOS)
  • 16 кольоровий режим високої роздільної здатності 640x480
  • 256-кольоровий кольоровий режим 320x200

Живопис пікселів

Дуже приблизно, залежно від графічної системи, конвеєр виглядає приблизно так:

Поточне місцезнаходження пікселів ⇒ Дані символу / шрифту / спрайта / пікселя / конфігураційних даних values ​​Значення пікселів ⇒ Палітра ⇒ ЦАП

Це той другий крок, який потрібно прочитати з декількох локацій ОЗУ. Наприклад, у текстовому режимі шукатиметься 1-байтний символ. Це сформувало б індекс у таблиці шрифтів. Трохи було б поглянуто на цю таблицю, вказуючи на те, чи повинен цей піксель бути кольором переднього плану чи фоном. Третій байт був би отриманий, щоб отримати цей колір переднього плану / фону. Загалом 3 байти, прочитані з оперативної пам'яті.

Але цей "потік" - це набір простих фіксованих схем, які розташовані точно так само, ну, щойно описаний потік.

Інтерфейс шини пам'яті

Процесорні процесори Intel мають цю дратівливу спадщину, яку називають шиною IO, але це не важливо, тому я буду робити вигляд, що її немає.

Процесори отримують доступ до оперативної пам’яті, транслюючи запит READ або WRITE та адресу на шині пам'яті. Хоча більшість дійсних адрес отримує відповідь з оперативної пам’яті, натомість певні діапазони обробляються пристроями . Наприклад, ЧИТАННЯ з певної адреси може дати вам інформацію про натискання клавіш на клавіатурі.

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

З VGA на графічній карті фактично є оперативна пам'ять , оскільки ви можете налаштувати відеокарту на попередньо оброблені дані до того, як вона запишеться до графічної оперативної пам’яті, щоб підвищити продуктивність у деяких ситуаціях.

VESA

Графічні карти після VGA пропонували більш високу роздільну здатність і хорошу глибину кольорів, але працювали з подібними принципами. Багато сучасних графічних карт все ще забезпечують сумісність із цим, щоб забезпечити більш високу роздільну здатність під час завантаження. Але VGA - це "бездоганний", який наслідує практично кожна карта.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.