Як інструкції з драйверів пристрою програмують графічний процесор?


9

Скажімо, я більше чи менше використовую комп’ютер, будь-який типовий сучасний комп'ютер. Драйвер пристрою несе відповідальність за все, що я бачу на своєму екрані, включаючи право, коли я набираю цей екран, оновлено (це, звичайно, в межах ОС, як Windows).

Давайте зведемо це до рівня, коли апаратне забезпечення не хвилює, є ядро ​​чи ні, і просто бере інструкції.

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

Якщо так, то чи використовує GPU "спеціальну" мову або "збірку", щоб зрозуміти інструкції, надіслані до неї, як це робить процесор?

У мене занадто багато прогалин у моїх знаннях, і є ця неприємна "таємниця" позаду графічних процесорів та доступу до них безпосередньо через апаратне забезпечення.

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

Я задавав такі типи питань, і вони швидко видаляються насильно, без відповіді, чому на багатьох сайтах, тож яка велика таємниця / секрет тут? Це обладнання на материнській платі, до якого можна отримати доступ, як і будь-який інший.

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

Тож як GPU "запрограмовані" з чистого, прямого апаратного погляду на специфічний для обладнання рівень?


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

Я не читаю довідковий центр.

Розум, якщо я запитаю, чому ні?
Doktoro Reichard

Тому що кращий час можна витратити на роздуми, намагаючись вирішити та відповісти на моє питання "ОК", як воно є.

І як я вже сказав, для правильного відповіді на це питання вам, напевно, потрібна книга ... довгі відповіді, як правило, не є гарними відповідями.
Doktoro Reichard

Відповіді:


8

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

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

Якщо так, то чи використовує GPU "спеціальну" мову або "збірку", щоб зрозуміти інструкції, надіслані до неї, як це робить процесор?

Так і ні. Як і більшість пристроїв, відеокарти використовують стандарти для спрощення питань. Вони використовують стандарти, такі як VESA, для доступу до звичайних функцій, таких як відеозапис під час завантаження, або CUDA для доступу до функцій програмування GPU. Крім того, програми можуть отримати доступ до нестандартних або залежних від пристрою функцій безпосередньо за допомогою машинного коду (часто C, складеного на асемблер) спільно з документацією програмування пристрою (які доступні на веб-сайті адаптера).

У мене занадто багато прогалин у моїх знаннях, і є ця неприємна "таємниця" позаду графічних процесорів та доступу до них безпосередньо через апаратне забезпечення.

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

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

Драйвер може читати та записувати пристрій за допомогою звичайних інструкцій процесора, отримуючи доступ до портів, нанесених на пам'ять, тощо. Як простий для розуміння приклад, ви можете поставити символ на екрані в текстовому режимі, записавши в "пам'ять" за адресою B8000. Ця адреса не була оперативною пам’яттю, а скоріше, вона була відображена так, щоб відповідати пам’яті відеокарти, тому запис на неї писатиметься на екран. Так само ви можете написати на екран, помістивши символу, який ви хочете записати в ALреєстр, 0x09в AHреєстр, а потім викликати переривання BIOS 0x10. Більш досконалі функції не відрізняються; Ви можете читати та записувати пам'ять адаптера, викликати функції на його мікросхемі тощо, використовуючи будь-яку внутрішню поверхню (і), яку пристрій виставляє та документи.

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

Тільки для функцій, які відповідають стандартам, але все інше (тобто більш досконалі речі), вам потрібно буде ознайомитися з програмними документами виробника.

Тож як GPU "запрограмовані" з чистого, прямого апаратного погляду на специфічний для обладнання рівень?

Через кілька шарів:

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

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

Гей, чи може вам підійти хороша пропозиція щодо книги для студента коледжу, яка висвітлює речі, про які ви говорили в цій публікації? Мені не цікаво ніколи працювати в програмуванні GPU, але прогалини в моєму розумінні того, як це все працює, неприємні.
lanza

2

Я не зовсім геній в галузі комп’ютерної архітектури, але спробую розглянути ваше питання по пунктах, якнайкраще, наскільки мені відомо.


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

Це правда, головним чином тому, що пряму взаємодію з GPU реалізувати непросто. Звідси розвиток графічних рамок, таких як DirectX і OpenGL.

Це зручне визначення з Вікіпедії пояснює це більш докладно:

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


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

Мікропроцесори - це мікропроцесори. Як такі вони переробляють. Вони обробляють дані, які подаються з центрального процесора (тобто положення елементів) на належне відображення. Вони "знають", як все зробити, тому що вони виготовлені саме так, і велика група людей погодилася щодо правильних способів надсилання даних до та з GPU.

Подумайте про драйвер дисплея як буфер або проксі. Уявіть, що ви вікно програми, і користувач рухає вас вгору. Ви просите GPU оновити дисплей. Але як GPU говорить Klingon, а ви говорите Vulcan , драйвер отримує вашу команду, переводить її в GPU, що, в свою чергу, виконує те, що ви наказали.

Якщо так, то чи використовує GPU "спеціальну" мову або "збірку", щоб зрозуміти інструкції, надіслані до неї, як це робить процесор?


З Вікіпедії :

Мова монтажу ARB - це мова затінення низького рівня, яку можна охарактеризувати як мову складання. Він був створений Радою з перегляду архітектури OpenGL (ARB) для стандартизації інструкцій GPU, що контролюють апаратний графічний конвеєр.

Ось такий приклад, і пам’ятайте, що окремі виробники (NVIDIA, ATI) мають власні набори інструкцій.

Крім того, існує OpenCL та багато інших способів безпосередньо програмувати інструкції до GPU.

Все це повинно певною мірою відповісти на ваше запитання.

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