Meu entendimento atual é que tudo o que é feito em um arquivo shader é feito na GPU, e tudo o que é feito no meu código (Java, no meu caso) é feito na CPU.
Esta é uma descrição precisa?
Meu entendimento atual é que tudo o que é feito em um arquivo shader é feito na GPU, e tudo o que é feito no meu código (Java, no meu caso) é feito na CPU.
Esta é uma descrição precisa?
Respostas:
Essa é a essência disso.
Em princípio, a plataforma poderia, concebivelmente, fazer o que quisesse. Pode-se imaginar um sistema operacional avançado fazendo a tradução just-in-time do código compilado, por exemplo, do código x86 para o GPU. Da mesma forma, os drivers OpenGL podem executar o que quiser na CPU host.
Mas, realmente, o que você acabou de descrever é o que acontece.
Geralmente sim. Java é usado para escrever programas que são executados na CPU. Linguagens de sombreador (cg, hlsl, et al) são usadas para escrever programas executados na gpu.
Uma exceção à regra seria usar APIs de terceiros que possam preencher a lacuna.
david van brink respondeu à sua pergunta em geral.
Mas, como ele diz, o driver OpenGL pode executar coisas na CPU, e isso realmente acontece muito. Especialmente em contextos de compatibilidade, onde algumas funções herdadas estranhas não podem ser implementadas nas placas gráficas. Eles exigem emulação de software. Por exemplo, eu ouvi falar antes que o pontilhado seja executado na CPU. Você também pode esperar surpresas com a escolha.
Essas surpresas podem acontecer ainda mais no MacOS usando contextos 2.1, porque a Apple unificou bastante a visão do OpenGL em toda a sua gama de hardwares, e alguns hardwares menores carecem de algumas coisas que precisam ser emuladas. É o máximo possível para executar a especificação INTEIRA OpenGL 2.1 totalmente na CPU, se o código de criação de contexto especificar um dispositivo de software explicitamente.
Por outro lado, o código executado através de bibliotecas de computação, como vexcl ou boost comput, ou o AMP da Microsoft, ou o nVidia thrust, PODE ser executado na GPU ou na CPU, dependendo dos sinalizadores de configuração da API.
E para o toque final, dentro da CPU, você também tem uma arquitetura DSP com a parte que chamamos de SIMD. O compilador ispc da Intel fornece ajuda na geração de código "garantido" para execução em pistas SIMD com muitos diagnósticos de desempenho em tempo de compilação para ajudá-lo a aproveitar ao máximo. Adicione o OpenMP a isso e você poderá obter o SIMD multithread, que aborda os conceitos de GPUs. Se você possui uma CPU de ponta e uma GPU de ponta, isso pode ser mais eficiente.
http://ispc.github.io/