Sobre mim:
O que é baixo-level (baixo-level) e paralelismo?
Para definir baixo-level é importante comparar com alto-nivel, então vamos definir antes alto-nivel. Python é uma linguagem de alto-nivel, por causa de suas caracteristicas semânticas, controle de memória, abstrações e camadas de depêndencia. Por exemplo, Python, roda em qualquer sistema operacional, mas depende um interpretador, e esse interpretador foi escrito em C e esse mesmo interpretador foi compilado, especificamente para esse sistema operacional e arquitetura. Evidênciado a sua dependência de camadas.
C++ não depende de um intepretador, não tem controle de memória e sua camada de dependência é quase nula, para cada sistema operacional e arquitetura, você precisa compilar para todos os OS(s). Para compreender melhor, linguagens como C++ e Rust, embora sejam divergentes, ainda tem diversas abstrações, portanto não podemos denominar verdadeiramente baixo-level, apenas linguagens como Assembly, que são mais diretas com instruções de maquinas sem nenhuma abstração.
Mas podemos usar como comparação, porque de JS para C é realmente uma quebra de dependencias enorme, quanto mais em baixo, menos dependencias de outras linguagens, mais controle e problemas não encontrados naturalmente em linguagens de alto-nivel.
Na área de gráficos, baixo-nivel é quando usamos uma API para diretamente mexer com a GPU, mas existem niveis entre as APIs.
OpenGL é uma API de alto-nivel em comparação com Vulkan ou DirectX 12.
O que é o paralelismo?
Em programação, é normal buscarmos fazer operações paralelas, deixando de lado os processos sequenciais, o conceito de paralelizar uma tarrefa, em sua essência é processar, sincronizar e usar.
O papel da paralelização nos softwares é a melhora de seu desempenho em quantidades de processos computados, entretanto, existem uma série de problemas recorrentes que é preciso enfrentar.
Como nos caso das threads em um software, aonde é necessario respeitar estados atomicos entre as threads para prevenir desincronização de dados.
Existem MUITAS maneiras de fazer a paralelização, temos a CPU e seus núcleos, internet e seus diferentes dispositivos conectados, e principalmente o assunto desta aula a GPU e seus nucleos especializados.
O que é a GPU?
Para ficar claro, a GPU, assim como a placa-mãe, possui um processador que controla a memória RAM e executa processamento de dados, acontece que a arquitetura do processador da GPU é diferente e o barramento da memoria também é diferente.
O paralelismo intensivo e extremo é possível devido à construção interna do processador. Em tese, o modelo de Von Neumann não se aplica às GPUs. Evidenciando a programação dificultosa e exótica. Atualmente, as GPUs estão ficando diferentes, com novas features, novas construções, tal como as GPUs tile-based, que ganham uma melhora no desempenho com as tecnologias de renderização atuais.
Porque é uma area extremamente importante para o avanço da humanidade?
Essa é uma pergunta importante!
Desde o ano de 1950 até 1990 a computação gráfica, foi um desafio insano e de altissimo presitigio. Em 1996 até os dias de hoje, a medida que as GPUs foram sendo construidas e melhoradas, das pioneiras 3dfx Voodoo 2 e 3 (1998) até as Nvidia RTX 4090 (2023), muito se foi feito, testado, abandonado e documentado.
Foi um momento caótico, porque em um curto espaço de tempo, novas técnologias surgiram, novas linguagens, e isso foi muito alavancador para a renderização, accesibilidade, avanço cientifico e computacional.
Um momento importante para as GPUs, foi a criação de linguagens de shaders no ano 2000, DirectX 8 trouxe esse conceito de trabalhar sem um pipeline fixo. O que permitiu um avanço significativo na renderização e uso de eficiente da GPU.
Os algoritmos de renderização, nasceram de uma vanguarda de pesquisadores e acadêmicos - Utah foi a primeira empresa influente de computação gráfica-. Muito do que temos hoje em dia, expecialmente a nossa medicina "moderna", testes expansivos de simulação de reações quimicas, previsões pela matemática, sim, a GPU proporciona poder computacional relevante para o avanço humano e tecnologico.
E hoje dia, o que é OpenGL, Metal, Vulkan, DirectX?
APIs no campo de GPUs, é uma camada de abstração que os drivers de GPUs implementam, as APIs, tem como papel apenas serem especificações.
Com a extrema capacidade moderna de poder computacional das GPUs, diferentes APIs surgiram. Todas essas APIs, são alternativas.
Microsoft DirectX é uma API que trabalha especificamente com Jogos, sendo otimizada para esse proposito, com diferentes versões. Sua versão atual é o DirectX 12 que reviveu filosofias do passado, de trabalhar com baixo-level.
Khrono Group OpenGL e Vulkan duas API que tem como objetivo em comum, ser compativel com qualquer plataforma. Em consideração Vulkan, também é a mais nova API baixo-level doada pela AMD (antiga Mantle), feita para reduzir as abstrações overhead desnecessarias pelo driver.
Apple com o Metal, sua API baixo-level para sua plataforma. Todas essas APIs, por mais que filosoficamente diferentes, em suma, fazem a mesma coisa.
OpenGL em especifico, tem muitas versões, um dos motivos do OpenGL ter tantas versões alternativas, é pela falta de proposito, de fato, OpenGL é multi-plataforma, mas para celulares Android, o uso do OpenGL é impossivel, por esse motivo, surgiu o OpenGL ES, que atualmente está na versão 3 desde 2016.
O WebGL é uma API que é fornecida pelo navegador, diferente das outras APIs do OpenGL, essa API trabalha dentro do contexto acelerado da engine do navegador, implicando na limitação do uso do OpenGL, alguns estágios de shaders não existem na versão web.
WGPU do Rust, é uma API que junta várias APIs em uma única API, essa biblioteca contém uma linguagem de shader que transpila para GLSL e compila em SPIR-V.