8 pontos por ssssut 2020-12-31 | 1 comentários | Compartilhar no WhatsApp

NVIDIA

Pioneira do mercado, com um toolkit maduro. Ainda continua evoluindo rapidamente, especialmente as APIs de nível mais alto (higher-level). Todas as GPUs vendidas pela NVIDIA oferecem suporte a CUDA.

O HPC SDK, anteriormente chamado de PGI e utilizável apenas no Linux, adicionou suporte a OpenACC, paralelização padrão de C++ (stdpar) e OpenMP (beta).

Um dos problemas de licenciamento do HPC SDK da NVIDIA é a seguinte cláusula:

You shall strictly prohibit the further distribution of the Run-Time Files by users of an End-User Application

Como o usuário não pode redistribuir o aplicativo incluindo os arquivos de runtime de que precisa em um app empacotado, talvez nem seja possível distribuir a aplicação. Esse problema não se aplica ao CUDA SDK, que é o que a maioria usa.

AMD

A principal plataforma de programação GPGPU no hardware da AMD é o ROCm. Além do HIP, que pertence à AMD, o que tem suporte oficial é OpenMP e OpenACC.

Há algumas desvantagens claras aqui:

  • Apenas Linux, portanto fica fora das opções em uma parte considerável do mercado.

  • Os binários gerados pelo toolchain do ROCm são específicos de hardware, em vez de terem como alvo uma IR. Quando uma nova geração é lançada, é preciso recompilar os binários.

  • Durante bastante tempo após o lançamento, praticamente não existe suporte para hardware novo.

Esses pontos fracos praticamente eliminam sua utilidade no desktop e deixam o OpenCL como a única API fornecida pelo vendor para hardware de GPU da AMD.

Intel

O oneAPI é compatível com todas as GPUs Intel lançadas recentemente, mas ainda não oferece alto desempenho. Além do Level Zero da Intel, as APIs com suporte oficial são OpenMP e SYCL.

O Level Zero do oneAPI usa SPIR-V como IR, o que permite suporte seamless a hardware que ainda será lançado. Também oferece suporte ao Windows.

Khronos

Fornece padrões da indústria que podem ser usados por vários vendors.

O reset conhecido como OpenCL 3.0 ainda não teve grande impacto. A combinação de SYCL com computação em Vulkan pode ser um caminho melhor para usar um único binário em vários vendors, junto com uma boa experiência de desenvolvimento.

Suporte real de OpenCL:

Hoje, a NVIDIA oferece OpenCL 1.2 com suporte a extensions.

A AMD fornece uma implementação utilizável de OpenCL 1.2, junto com uma implementação de OpenCL 2.x extremamente cheia de bugs (e sem uma forma adequada de depurar).

A Intel fornece uma implementação de OpenCL 3.0 para GPUs Intel.

O OpenCL 1.2 também é suportado no macOS, inclusive no Apple Silicon, mas a documentação está deprecada.

Microsoft

O C++ AMP parece estar morto. Era vendor-independent e tinha suporte do Visual C++, mas nunca mais foi atualizado depois do D3D11. Versões antigas do ROCm também eram compatíveis.

Apple

A computação com Metal serve apenas para macOS/iOS/… No campo de GPGPU, é bem pouco atraente, especialmente em desempenho de computação em GPU.

1 comentários

 
kbumsik 2020-12-31

GPGPU varia muito entre fornecedores e sistemas operacionais, então espero que algum dia isso seja unificado.

Aliás, não há nenhuma menção ao DirectML do Windows. Ele tem suporte amplo de hardware e, mais recentemente, passou a funcionar também no WSL, então isso vinha despertando meu interesse.