In che modo le istruzioni del driver del dispositivo programmano la GPU?


9

Supponiamo che io stia usando un computer, qualsiasi computer moderno tipico più o meno. Un driver di dispositivo è responsabile di tutto ciò che vedo sul mio schermo, incluso mentre lo digito, lo schermo viene aggiornato (questo, ovviamente, rientra nell'ambito di un sistema operativo, come Windows).

Portiamo questo al livello in cui all'hardware non importa se c'è un kernel o no, e prende semplicemente le istruzioni.

Fondamentalmente, come fanno le GPU a "sapere" esattamente come fare tutto? Un driver controlla sostanzialmente ogni funzione minuscola, intrinseca o hardware a livello di circuito possibile o necessaria per calcolare i dati binari per la visualizzazione utilizzando istruzioni speciali fornite da un driver?

In tal caso, la GPU utilizza un linguaggio "speciale" o "assembly" per comprendere le istruzioni che le vengono inviate come fa una CPU?

Ho troppe lacune nelle mie conoscenze e c'è questo "mistero" spiacevole dietro le GPU e accedendo direttamente tramite hardware.

Ad esempio, una GPU e una CPU devono essere in grado di connettersi in qualche modo, quindi è possibile accedere a una GPU tramite un assieme di CPU e implementare i bus di dati / indirizzo corretti. Non è possibile che un fornitore di dispositivi possa rendere impossibile l'accesso alla GPU al di fuori di un driver, poiché un driver è anche codice compilato e la GPU, come circuito programmabile, deve funzionare con istruzioni binarie.

Ho fatto questo tipo di domande e vengono cancellate in modo violento rapidamente senza risposta perché su molti siti, quindi qual è il grande mistero / segreto qui? È un componente hardware su una scheda madre a cui si accede come un altro.

Quindi davvero ... supponendo che questa sia una domanda "ok" qui relativa a software e hardware, chiunque può accedere direttamente a una GPU senza file specifici del fornitore, perché i file non sono magici.

Quindi, come vengono "programmate" le GPU dal punto di vista hardware diretto e bare metal a livello specifico dell'hardware?


Una domanda "OK" sembra secondo me (anche se contorta e forse richiede un libro per rispondere - che non è un buon formato, quindi prima guarda il centro assistenza e le pagine del tour per familiarizzare con il tipo di domande che puoi porre qui) .
Doktoro Reichard,

Non sto leggendo il centro assistenza.

Ti dispiace se chiedo perché no?
Doktoro Reichard,

Perché si può trascorrere del tempo migliore meditando, cercando di risolvere e rispondere alla mia domanda "OK" così com'è.

E come ho detto, per rispondere correttamente a questa domanda probabilmente avresti bisogno di un libro ... le risposte lunghe di solito non sono buone risposte.
Doktoro Reichard,

Risposte:


8

Fondamentalmente, come fanno le GPU a "sapere" esattamente come fare tutto? Un driver controlla sostanzialmente ogni funzione minuscola, intrinseca o hardware a livello di circuito possibile o necessaria per calcolare i dati binari per la visualizzazione utilizzando istruzioni speciali fornite da un driver?

No, il dispositivo ha i propri circuiti integrati che controllano tutti gli aspetti a livello hardware del funzionamento del dispositivo e si interfacciano con un processore centrale che coordina gli aspetti sul dispositivo e fornisce un'interfaccia di programmazione di livello superiore che può essere utilizzata per accedere, leggere, scrivere e controllare il dispositivo.

In tal caso, la GPU utilizza un linguaggio "speciale" o "assembly" per comprendere le istruzioni che le vengono inviate come fa una CPU?

Sì e no. Come la maggior parte dei dispositivi, le schede video utilizzano gli standard per semplificare le cose. Usano standard come VESA per accedere alle normali funzioni come il video all'avvio o CUDA per accedere alle funzioni di programmazione GPU. Inoltre, i programmi possono accedere alle funzioni non standard o dipendenti dal dispositivo direttamente utilizzando il codice macchina (spesso compilato in C per l'assemblatore) insieme alle documentazioni di programmazione del dispositivo (disponibili sul sito Web dell'adattatore).

Ho troppe lacune nelle mie conoscenze e c'è questo "mistero" spiacevole dietro le GPU e accedendo direttamente tramite hardware.

I driver accedono direttamente al dispositivo, motivo per cui hanno un accesso speciale (i programmi di livello utente normale non sono autorizzati ad accedere all'hardware direttamente in Vista + per motivi di sicurezza e stabilità). L'accesso al dispositivo tramite porte, DMA ( Direct Memory Access ) e mapping della memoria .

Ad esempio, una GPU e una CPU devono essere in grado di connettersi in qualche modo, quindi è possibile accedere a una GPU tramite un assieme di CPU e implementare i bus di dati / indirizzo corretti. Non è possibile che un fornitore di dispositivi possa rendere impossibile l'accesso alla GPU al di fuori di un driver, poiché un driver è anche codice compilato e la GPU, come circuito programmabile, deve funzionare con istruzioni binarie.

Un driver può leggere e scrivere il dispositivo con le normali istruzioni della CPU accedendo alle porte mappate in memoria e simili. Come esempio di facile comprensione, puoi mettere un personaggio sullo schermo in modalità testo scrivendo in "memoria" all'indirizzo B8000. Questo indirizzo non era RAM, ma piuttosto era mappato per corrispondere alla memoria della scheda video, quindi scrivere su di esso avrebbe scritto sullo schermo. Allo stesso modo, è possibile scrivere sullo schermo inserendo il carattere che si desidera scrivere nel ALregistro, 0x09nel AHregistro e quindi chiamare l'interrupt del BIOS 0x10. Le funzioni più avanzate non sono diverse; puoi leggere e scrivere la memoria dell'adattatore, chiamare le funzioni sul suo chip e così via usando qualunque interfaccia (e) che il dispositivo espone e documenti.

Quindi davvero ... supponendo che questa sia una domanda "ok" qui relativa a software e hardware, chiunque può accedere direttamente a una GPU senza file specifici del fornitore, perché i file non sono magici.

Solo per funzionalità conformi agli standard, ma per tutto il resto (ad es. Le cose più avanzate), dovrai consultare i documenti di programmazione del produttore.

Quindi, come vengono "programmate" le GPU dal punto di vista hardware diretto e bare metal a livello specifico dell'hardware?

Attraverso più livelli:

  1. Componenti a stato solido come transistor e simili
  2. ASIC di basso livello
  3. Processori e chipset integrati
  4. Interfacce di programmazione di basso livello (assembly)
  5. Interfacce di programmazione di livello superiore (DirectX, OpenGL)
  6. Linguaggio di programmazione di alto livello (C ++, C #, Python, ecc.)

1
nota su "bare metal"; nel caso in cui ascolti la maggior parte degli sviluppatori di giochi, si lamentano del fatto che devono usare astrazioni di alto livello come DirectX / OpenGL piuttosto che scrivere codice che viene compilato nella lingua della macchina. vedi qui per informazioni sulla lingua dell'assemblatore utilizzata dalle GPU FERMI di Nvidia code.google.com/p/asfermi nota che anche CUDA si trova in cima a una langague di alto livello (PTX) che viene compilata in codice macchina, quindi gli opcocode programmati in CUDA potrebbero non essere uguale all'output compilato.
Frank Thomas,

Ehi, potresti avere un buon suggerimento per un libro adatto a uno studente universitario che copre le cose di cui hai parlato in questo post? Non mi interessa lavorare mai nella programmazione GPU, ma le lacune nella mia comprensione di come funziona tutto è frustrante.
Lanza,

2

Non sono esattamente un genio dell'architettura informatica, ma cercherò di trattare la tua domanda per punti, per quanto ne sappia.


Un driver di dispositivo è responsabile di tutto ciò che vedo sul mio schermo, incluso mentre lo digito, lo schermo viene aggiornato (questo, ovviamente, rientra nell'ambito di un sistema operativo, come Windows).

È vero, principalmente perché l'interazione diretta con la GPU non è facile da implementare. Da qui lo sviluppo di framework grafici come DirectX e OpenGL.

Questa utile definizione di Wikipedia lo spiega in modo più dettagliato:

Un driver di dispositivo semplifica la programmazione fungendo da traduttore tra un dispositivo hardware e le applicazioni o i sistemi operativi che lo utilizzano. I programmatori possono scrivere il codice dell'applicazione di livello superiore indipendentemente dall'hardware specifico utilizzato dall'utente finale.


Fondamentalmente, come fanno le GPU a "sapere" esattamente come fare tutto? Un driver controlla sostanzialmente ogni funzione minuscola, intrinseca o hardware a livello di circuito possibile o necessaria per calcolare i dati binari per la visualizzazione utilizzando istruzioni speciali fornite da un driver?

Le GPU sono microprocessori. Come tali, elaborano. Elaborano i dati che vengono alimentati dalla CPU (ovvero la posizione degli elementi) su un display adeguato. Loro "sanno" come fare tutto perché sono fabbricati in quel modo e un folto gruppo di persone ha concordato i modi corretti per inviare dati da e verso la GPU.

Pensa al driver di visualizzazione come un buffer o un proxy. Immagina di essere una finestra del programma e l'utente ti sposta in alto. Chiedete alla GPU di aggiornare il display. Ma mentre la GPU parla Klingon e tu parli Vulcan , il driver riceve il tuo comando, lo traduce nella GPU che a sua volta fa ciò che hai comandato.

In tal caso, la GPU utilizza un linguaggio "speciale" o "assembly" per comprendere le istruzioni che le vengono inviate come fa una CPU?


Da Wikipedia :

Il linguaggio assembly ARB è un linguaggio di ombreggiatura di basso livello, che può essere caratterizzato come linguaggio assembly. È stato creato da OpenGL Architecture Review Board (ARB) per standardizzare le istruzioni GPU che controllano la pipeline grafica hardware.

Ecco questo esempio e ricorda che i singoli produttori (NVIDIA, ATI) hanno i propri set di istruzioni.

Inoltre, esiste OpenCL e molti altri modi per, in un certo senso, programmare direttamente le istruzioni per la GPU.

Tutto ciò dovrebbe rispondere alla tua domanda, in una certa misura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.