Per cosa possono essere usati esattamente gli shader?


8

Non sono davvero una persona 3D, e ho usato solo un po 'di shader in alcuni esempi di Three.js, e finora ho avuto l'impressione che vengano usati solo per la parte grafica dell'equazione.

Tuttavia, l'articolo (abbastanza enigmatico) di Wikipedia e alcune altre fonti mi portano a credere che possano essere usati per più di semplici effetti grafici, cioè per programmare la GPU ( Wikipedia ).

Quindi, la GPU è ancora un processore, giusto? Con un set di istruzioni più grande e diverso per una manipolazione vettoriale più semplice e veloce, ma ancora un processore. Posso usare shader per creare programmi regolari (a condizione che abbia accesso alla memoria video, il che è probabile)?

Modifica: programmi regolari == "Applicazioni", vale a dire creare programmi Windows / console o almeno avere un modo di disegnare cose sullo schermo, magari anche prendendo l'input dell'utente.


2
Che cosa intendi con "programmi regolari"
kravemir il

2
+1 Per la domanda di sviluppo del gioco più carina che abbia mai visto, è riuscito anche a ripensare la mia visione del mondo.
knight666,

1
"==" è un comparatore, non un operatore di assegnazione :)
kravemir,

2
Sì, lo so, è ancora valido da usare. Non volevo "assegnare" la spiegazione alla definizione, volevo equipararli.
jcora,

Risposte:


13

Inizialmente, l'hardware di elaborazione grafica dedicato aveva una serie fissa di funzioni cablate. Servirebbe la geometria di input, farebbe cose molto specifiche per trasformarla e rasterizzarla, quindi esplodere i risultati sullo schermo. Nel tempo, questa funzionalità è diventata parametrica e infine programmabile. "Shader" è diventato il termine utilizzato per i programmi in esecuzione sulla GPU, poiché controllavano la trasformazione e l'ombreggiatura della geometria.

Man mano che l'hardware della GPU si è evoluto, sempre più è diventato programmabile, quindi ora la maggior parte dei tipi di shader che si possono scrivere contribuisce solo indirettamente all'ombreggiatura effettiva di qualsiasi cosa sullo schermo (mi riferisco a cose come geometria e shader di scafo qui ). Con ciò è arrivata la generalizzazione della GPU come dispositivo per eseguire elaborazioni basate su stream altamente simultanee su larga scala, in modo tale che mentre l' intento di una GPU e degli shader è generalmente quello di implementare un qualche tipo di effetto grafico di fantasia, possono anche essere utilizzato per eseguire determinati tipi di calcoli per scopi generici (in particolare quelli che sono adatti per essere calcolati in parallelo). Questo è spesso indicato come programmazione GPU generica o "GPGPU".

Tuttavia, la GPU è ancora altamente specializzata e non può fare molte cose che una CPU potrebbe fare. Ha anche una connettività limitata al resto dell'hardware in un sistema, quindi non puoi davvero scrivere programmi "normali" (con output della console o input del mouse, eccetera) interamente sulla GPU. È possibile eseguire calcoli sulla GPU che non devono essere interpretati come rendering, ma non è una CPU autonoma a sé stante.


5

La GPU non può dire alla CPU cosa fare. Può solo fornire risultati nella sua memoria che leggerà la CPU.

Shader / GPGPU non possono essere utilizzati per :

  • prendendo l' input dell'utente direttamente senza CPU , perché sono implementati come interruzioni della CPU
  • creazione di qualsiasi applicazione , perché le applicazioni sono gestite dal kernel e che viene eseguito dalla CPU
  • creazione di qualsiasi finestra , poiché il gestore / server di finestre viene eseguito nella CPU

Shader / GPGPU possono essere utilizzati per :

  • disegnare cose su schermo / finestra, ma deve essere controllato dalla CPU
  • decodifica / codifica video
  • elaborazione di immagini in editor grafici professionali - vari effetti effetti paralleli eseguibili come sfocatura, bordi nitidi, ...
  • calcoli di fisica

Vedi OpenCL . Può utilizzare shader per calcoli non grafici.

Modifica in base ai commenti:

Gli shader vengono utilizzati solo per il rendering della grafica. L'esecuzione di calcoli non grafici nella GPU si chiama GPGPU .


L'ultimo punto non è del tutto vero, non stai usando shader per calcolare la fisica, stai usando l'API GPGPU come OpenCL e CUDA.
dreta,

@dreta Sì. È vero. Sulla base della sua domanda, penso che intendesse shader come unità di elaborazione hardware. Ha detto "ma ancora un processore".
kravemir,

2
beh, allora correggilo per aver sbagliato, perché stai riconoscendo il suo malinteso, ha detto che non è un guru del rendering, gli shader non sono ambigui, hanno un ruolo specifico
dreta,

-4

Semplice. L'unità di elaborazione grafica alla fine ha ottenuto gli shader, che hanno effetti fantasiosi per l'ombreggiatura. Questo è diventato programmabile, quindi gli effetti sono diventati sempre più fantasiosi. Alla fine l'intera GPU divenne un'unità SIMD.

SIMD significa dati muliple a singola istruzione. Attualmente le GPU sono come un albero. Ha X molti core, ognuno con Y molti core, e Z molti core. Più si scende verso il basso, più veloce e piccola è la memoria, più paralleli e più rapidi i calcoli.

Quindi la GPU è diventata una specie di GPU General Purpuse. Non si chiama CPU perché non è l'unità di elaborazione centrale, anche se può gestire I / O, gestione della memoria e pianificazione.

Inutile dire che la potenza della GPGPU deriva dal dover eseguire alcune operazioni parallele divisibili su molti dati contemporaneamente. Sebbene sia quindi inutile per la maggior parte delle cose di software generali, nVidia sta lavorando per trasformare la GPGPU in una CPU. Credono di poter esporre la GPU come CPU ARM. Questa tecnica di traduzione è anche all'interno delle CPU x86, che sono RISC al centro.

OpenCL, CUDA e DirectX sono come un linguaggio di programmazione a doppia personalità. OpenCL, ad esempio, funziona sulla CPU, ma scarica "bombe" ("kernel") che beneficiano di SIMD, sulla GPU.

Non passerà molto tempo prima che sia tutto in stile CPU / GPU Fusion / Sandy Bridge.


3
-1. La tua scelta di parole riduce drasticamente la qualità di quella risposta.
Bummzack,

La scelta delle parole è di per sé insignificante: en.wikipedia.org/wiki/On_Denoting Pertanto non riduce la qualità della risposta, poiché la qualità non ha nulla a che fare con la domanda, ma con la logica. In realtà è la risposta più corretta.
Vincent

2
La scelta delle parole è molto importante. Se usi un linguaggio offensivo, la tua risposta non sarà considerata buona. Qualcuno con una risposta utile passerà del tempo assicurandosi che sia eloquente ed elegante.
Jonathan Pitre,

Se hai un problema con la lingua, modifica la risposta. Spetta a tutti rendere il sito migliore.
Tetrad,

Se la richiesta di comprensione logica provenga da uno zombi filosofico bicameralista, mi soddisferebbe a prescindere, perché la conoscenza è uguale al potere. Non mi piace trasmettere la conoscenza ai bicamerali che apprezzano le emozioni più della logica. Migliora solo la risposta.
Vincent
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.