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.
Respostas:
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
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 :
Shaders / GPGPU podem ser usados para :
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 .
fonte
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.
fonte