Skip to content

Latest commit

 

History

History
69 lines (46 loc) · 5.42 KB

3-.md

File metadata and controls

69 lines (46 loc) · 5.42 KB

Diferentes campos e o mercado exterior.

Como dito na introdução, a GPU é relevante para o avanço cientifico e da humanidade, logo um campo muito importante é a biotecnologia, a simulação em especifico, é um campo que utiliza da GPU para computar problemas de física, química, previsões matemáticas sobre o universo etc.

Dentre os campos que a GPU está, intêligencia artificial é um campo que depende do poder computacional das GPUs. O indexamento de palavras, aprendizado, treinamento, multiplicações de matrizes, ocorre dentro da GPU. Automatização com embedded, usando IA, pela quantidade pequena de poder de hardware, é preciso aproveitar a qualquer custo.


Principalmente engines, a area de desenvolvimento de jogos se sustenta por causa de engenheiros de gráficos, programadores que implementam melhorias de performance, mexem com a rendering engine dos motores, implementando renderers usando as APIs. A programação de script de jogos não necesseriamente é ligado com a GPU, pois se trata de uma grande abstração e layer de desenvolvimento, mas ainda assim, compartilham do mesmo fundamento, mesmo se tratando de ferramentas de alto-nivel que facilitam a renderização, tal como as engines Unity, Unreal Engine, Godot etc.


Kernel e drivers, essa é uma área realmente low-level, digamos que ela não necessariamente é acelerada por GPU, mas é aonde você programa o driver da GPU, como o driver mapea a memória, como faz o gerenciamento de VRAM, e as restrições do framebuffer default. Não fica evidente, mas o kernel do sistema operacional também deve controlar o tanto de VRAM usado, isso requer um conhecimento de como funciona a GPU e seus drivers.


Compiladores e interpretadores, com o decorrer do avanço, as GPUs foram sendo usadas para propositos gerais (GPGPU), algumas linguagens usam a GPU para acelerar a compilação, e no caso da Júlia, uma linguagem totalmente acelerada por GPU, usada no campo acadêmico. A relação de GPU e compiladores, também fica evidente nas linguagens de shaders, o OpenGL usa JIT (just in time) e compila as shaders em tempo de execução, enquanto Vulkan é preciso usar um compilador chamado SPIR-V. Carregar binários de shaders é muito mais rapido do que compilar, reduzindo o tempo de tela de loading.


Computação gráfica, pode ser semelhante a graphics programming, mas é uma área que pode ser entendida como pesquisas, geometria, animações etc. Graphics programming é uma área especializada na criação de rendering engines, implementação de equações impiricas de renderização (PBR), raytracing e performance de uma engine de renderização.


Todas esses sub-campos compartilham do mesmo fundamento, e o começo da carreira depende exclusivamente da sua curiosidade e como dito no cap passado, a paixão.

Comentando mais sobre desenvolvimento de engines, graphics programming, e desenvolvimento de jogos. Essas áreas ainda são muito dificeis de começar, requer muito estudo e muito tempo, mas vale ressaltar que existem diferenças. Desenvolvimento de engines não necessariamente está voltado para a renderização de gráficos, mas também som, assets, performance geral, compatibilidade, implementação de ferramentas low-level, implementação de um sistema de script. O desenvolvimento de jogos, como dito anteriormente, é muito mais a lógica, e raramente você encontraria um sistema diretamente low-level. Graphics programming é especializado, a criação de sistemas de materiais, sistema de shaders accesiveis.


GPGPU é um assunto complexo, temos algumas APIs principais para o uso efetivo da GPU, tal como CUDA, OpenCL e Vulkan.

Cuda é uma API especial que roda apenas em GPUs Nvidia, por conta da sua otimização voltada para as arquiteturas, OpenCL possibilita rodar em qualquer fornecedor ou dispositivo. O Vulkan também pode ser uma alterntativa para isso, permitindo criar mini-códigos e executar fora do pipeline de renderização, em blocos de workers dedicados a compute shaders nas GPUs.


Se você pretende fazer alguma faculdade, pode ser um bom passo para começar essa carreira, o mercado atual é muito mais voltado para soluções computacionais de otimização via GPU, do que só renderização. Freelancer costuma ainda ser o único quebra galho, fazendo pequenos projetos de renderização, trabalhos acadêmicos etc.


O cenário de desenvolvimento A e AA ainda, prevalece em engines atuais, como Unity, Unreal Engine e Godot. Mas vai depender muito dá sorte, é uma área muito prestigiada e competitiva. É importante destacar, que o desenvolvimento de jogos Indle(s) são feitos em engines já populares. O trabalhano desenvolvimento de engine de jogos, pode ser portar uma engine de renderização para outra API, por exemplo, portar um jogo de PC para o console, e esse trabalho, costuma ser mais de debugar, testar, implementar e resolver bugs (as coisas não renderizam em diferentes APIs por exemplo). Também resolver bugs de compiladores.

O cenário de desenvolvimento AAA é mais complexo.

Existe muita pressão por parte do desenvolvimento (em A e AA também), a área de graphics programming pode ser encontrado em empresas AAA como a Ubisoft. Infelizmente o estágio ou programação júnior, pode as vezes depender de um curso superior, embora não seja tão requisitado no exterior, você pode ter uma pequena chance.

O cenário, é competitivo, absurdamente competitivo, não é muito facil lidar com tanta informação e conhecimento.