8 puntos por ssssut 2020-12-31 | 1 comentarios | Compartir por WhatsApp

NVIDIA

La pionera del mercado, con un toolkit desarrollado. Sigue evolucionando rápidamente, y especialmente las API de alto nivel aún más. Todas las GPU que vende NVIDIA son compatibles con CUDA.

El HPC SDK, antes conocido como PGI y disponible solo en Linux, agregó soporte para OpenACC, paralelización estándar de C++ (stdpar) y OpenMP (beta).

Uno de los problemas del licenciamiento del HPC SDK de NVIDIA es la siguiente cláusula:

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

Como los usuarios no pueden redistribuir la aplicación incluyendo los archivos de runtime que necesita una app empaquetada, puede que directamente no sea posible distribuir la aplicación. Este problema no aplica al CUDA SDK, que es el que usa la mayoría.

AMD

La principal apuesta para programación GPGPU en hardware de AMD es ROCm. Además de HIP, que pertenece a AMD, lo que se soporta oficialmente es OpenMP y OpenACC.

Aquí hay algunas desventajas claras:

  • Solo Linux, por lo que queda fuera de consideración en una parte importante del mercado.

  • Los binarios generados con el toolchain de ROCm no apuntan a IR, sino que dependen del hardware. Cuando sale una nueva generación, hay que recompilar los binarios.

  • Durante bastante tiempo después del lanzamiento, el soporte para hardware nuevo es prácticamente inexistente.

Estas desventajas hacen que su utilidad en escritorio sea prácticamente nula y dejan a OpenCL como la única API provista por el vendor para hardware GPU de AMD.

Intel

oneAPI es compatible con todas las GPU Intel lanzadas recientemente, pero todavía no ofrece alto rendimiento. Además de Level Zero de Intel, las API soportadas oficialmente son OpenMP y SYCL.

Level Zero de oneAPI usa SPIR-V como IR, lo que permite soporte fluido para hardware que se lance en el futuro. También es compatible con Windows.

Khronos

Ofrece estándares de la industria que pueden usarse entre múltiples vendors.

El reinicio conocido como OpenCL 3.0 todavía no tiene un gran impacto. La combinación de SYCL y cómputo en Vulkan podría ser un mejor camino para usar un solo binario entre múltiples vendors, con una buena experiencia de desarrollo.

Soporte real de OpenCL:

Hoy NVIDIA ofrece OpenCL 1.2 con soporte para extensions.

AMD ofrece una implementación utilizable de OpenCL 1.2 y una implementación de OpenCL 2.x extremadamente llena de bugs (sin una forma adecuada de depurarla).

Intel ofrece una implementación de OpenCL 3.0 para GPU Intel.

OpenCL 1.2 también está soportado en macOS, incluido Apple Silicon, aunque la documentación está marcada como deprecada.

Microsoft

C++ AMP parece estar muerto. Era vendor-independent y contaba con soporte de Visual C++, pero no se actualiza desde D3D11. También llegó a soportar versiones antiguas de ROCm.

Apple

El cómputo con Metal es solo para macOS/iOS/… En el campo de GPGPU resulta bastante poco atractivo, y todavía más cuando se trata de rendimiento de cómputo GPU.

1 comentarios

 
kbumsik 2020-12-31

Con GPGPU, la situación varía muchísimo según el proveedor y el sistema operativo, así que ojalá algún día se unifique.

Por cierto, no hay ninguna mención a DirectML de Windows. Soporta una amplia variedad de hardware y últimamente incluso lo hicieron funcionar en WSL, así que me parecía interesante.