Para que exatamente os shaders podem ser usados?

8

Eu não sou realmente uma pessoa 3D, e só usei shaders um pouco em alguns exemplos do Three.js. Até agora, tenho a impressão de que eles estão sendo usados ​​apenas para a parte gráfica da equação.

Embora o artigo (bastante enigmático) da Wikipedia e algumas outras fontes me levem a acreditar que podem ser usados ​​para mais do que apenas efeitos gráficos, ou seja, para programar a GPU ( Wikipedia ).

Então, a GPU ainda é um processador, certo? Com um conjunto de instruções maior e diferente para manipulação vetorial mais fácil e rápida, mas ainda um processador. Posso usar shaders para criar programas regulares (desde que eu tenha acesso à memória de vídeo, o que é provável)?

Edit: programas regulares == "Aplicativos", ou seja, crie programas do Windows / console, ou pelo menos tenha alguma maneira de desenhar coisas na tela, talvez até recebendo informações do usuário.

jcora
fonte
2
O que você quer dizer com "programas regulares"
kravemir
2
+1 Para a pergunta mais fofa sobre desenvolvimento de jogos que eu já vi, que também conseguiu repensar minha visão de mundo.
Junta
11
"==" é comparador, não operador de atribuição :)
kravemir
2
Sim, eu sei, ainda é válido de usar. Não queria "atribuir" a explicação à definição, queria igualá-las.
jcora

Respostas:

13

Originalmente, o hardware de processamento gráfico dedicado tinha um conjunto fixo de funções. Seria necessária a geometria de entrada, faria coisas muito específicas para transformá-la e rasterizá-la e depois enviar os resultados para a tela. Com o tempo, essa funcionalidade tornou-se parametrizada e eventualmente programável. "Shaders" se tornou o termo usado para os programas executados na GPU, pois controlavam a transformação e o sombreamento da geometria.

À medida que o hardware da GPU evoluiu, cada vez mais se tornou programável; agora, a maior parte dos tipos de sombreadores que se pode escrever contribui apenas indiretamente para o sombreamento real de qualquer coisa na tela (estou me referindo a coisas como geometria e sombreamento aqui ) Com isso veio a generalização da GPU como um dispositivo para realizar processamento baseado em fluxo altamente concorrente em larga escala, de modo que, embora a intenção de uma GPU e de shaders seja geralmente implementar algum tipo de efeito gráfico sofisticado, eles também podem ser usado para executar certos tipos de cálculos de uso geral (particularmente aqueles que são adequados para serem computados em paralelo). Isso geralmente é chamado de programação GPU de uso geral ou "GPGPU".

No entanto, a GPU ainda é altamente especializada e não pode fazer muitas das coisas que uma CPU poderia fazer. Também possui conectividade limitada ao restante do hardware de um sistema; portanto, você não pode realmente escrever programas "regulares" (com saída do console ou entrada do mouse etc.) inteiramente na GPU. Você pode executar cálculos na GPU que não devem ser interpretados como processados, mas não é uma CPU autônoma por si só.


fonte
5

A GPU não pode dizer à CPU o que fazer. Ele pode apenas fornecer resultados em sua memória, que serão lidos pela CPU.

Shaders / GPGPU não podem ser usados ​​para :

  • recebendo entrada do usuário diretamente sem CPU , porque eles são implementados como interrupções da CPU
  • criação de qualquer aplicativo , porque os aplicativos são gerenciados pelo kernel e executados pela CPU
  • criação de qualquer janela , porque o gerenciador / servidor de janelas é executado na CPU

Shaders / GPGPU podem ser usados ​​para :

  • desenhar coisas na tela / janela, mas deve ser controlado pela CPU
  • decodificação / codificação de vídeo
  • processamento de imagem em editores gráficos profissionais - vários efeitos efeitos executáveis ​​paralelos, como desfoque, nitidez de bordas, ...
  • cálculos de física

Veja OpenCL . Ele pode utilizar sombreadores para cálculos não gráficos.

Edite com base nos comentários:

Os shaders são usados ​​apenas para renderizar gráficos. A realização de cálculos não gráficos na GPU é chamada de GPGPU .

kravemir
fonte
O último ponto não é bem verdade, você não está usando shaders para calcular a física, está usando a API GPGPU como OpenCL e CUDA.
dreta
@dreta Sim. É verdade. Com base em sua pergunta, acho que ele quis dizer shaders como unidades de processamento de hardware. Ele disse "mas ainda é um processador".
Kravemir
2
bem, então corrigi-lo por ser errado, por que você está aknowledging seu equívoco, ele disse que não é um guru de renderização, shaders não são ambíguos, eles têm um papel específico
dreta
-4

Simples. A unidade de processamento gráfico acabou obtendo shaders, o que resulta em efeitos de fantasia para sombreamento. Isso se tornou programável para que os efeitos se tornassem cada vez mais sofisticados. Eventualmente, toda a GPU se tornou uma unidade SIMD.

SIMD significa Dados Múltiplos de Instrução Única. Atualmente, as GPUs são como uma árvore. Possui X muitos núcleos, cada um com Y muitos núcleos, tendo Z muitos núcleos. Quanto mais você desce a árvore, mais rápida e menor é a memória, mais paralelos e simplificados os cálculos.

Portanto, a GPU se tornou uma espécie de GPU General Purpuse. Ele não é chamado de CPU porque não é a unidade central de processamento, embora possa lidar com E / S, gerenciamento e programação de memórias.

Escusado será dizer que o poder da GPGPU vem de ter que fazer algumas operações paralelas e dividíveis em muitos dados ao mesmo tempo. Embora seja, portanto, inútil para a maioria dos softwares em geral, a nVidia está trabalhando para tornar a GPGPU uma CPU. Eles acreditam que podem expor a GPU como uma CPU ARM. Essa técnica de tradução também está dentro das CPUs x86, que são RISC em seu núcleo.

OpenCL, CUDA e DirectX são como uma linguagem de programação de personalidade dividida. O OpenCL, por exemplo, roda na CPU, mas descarrega 'bombas' ("kernels") que estão se beneficiando do SIMD na GPU.

Não demorará muito para que seja do tipo CPU / GPU Fusion / Sandy Bridge.

Vincent
fonte
3
-1. Sua escolha de palavras diminui drasticamente a qualidade dessa resposta.
bummzack
A escolha de palavras é, por si só, sem significado: en.wikipedia.org/wiki/On_Denoting Portanto, não diminui a qualidade da resposta, porque a qualidade não tem nada a ver com a pergunta, mas com lógica. Na verdade, é a resposta mais correta.
Vincent
2
A escolha das palavras é muito importante. Se você usar linguagem ofensiva, sua resposta não será considerada boa. Alguém com uma resposta que vale a pena gastará tempo certificando-se de que é eloquente e elegante.
Jonathan Pitre
Se você tiver algum problema com o idioma, edite a resposta. Cabe a todos melhorar o site.
Tétrada
Se o pedido de entendimento lógico vier de um zumbi filosófico bicameralista, isso me satisfaria de qualquer maneira, porque conhecimento é igual a poder. Não gosto de entregar conhecimento a bicamerales que valorizam mais a emoção do que a lógica. Isso apenas melhora a resposta.
31712 Vincent