GPU

Introducción a la programación de GPU

Introducción a la programación de GPU

La computación de propósito general en una GPU (Unidad de procesamiento de gráficos), más conocida como programación de GPU, es el uso de una GPU junto con una CPU (Unidad de procesamiento central) para acelerar el cálculo en aplicaciones tradicionalmente manejadas solo por la CPU.Aunque la programación de GPU ha sido prácticamente viable solo durante las últimas dos décadas, sus aplicaciones ahora incluyen prácticamente todas las industrias. Por ejemplo, la programación de GPU se ha utilizado para acelerar el procesamiento de señales de video, imágenes digitales y audio, física estadística, computación científica, imágenes médicas, visión por computadora, redes neuronales y aprendizaje profundo, criptografía e incluso detección de intrusiones, entre muchas otras áreas.

Este artículo sirve como una introducción teórica dirigida a aquellos que deseen aprender a escribir programas acelerados por GPU, así como a aquellos que solo tienen un interés general en este fascinante tema.

La diferencia entre una GPU y una CPU

Mucho tiempo antes de que los gráficos 3D de alta resolución y alta fidelidad se convirtieran en la norma, la mayoría de las computadoras no tenían GPU. En cambio, la CPU llevó a cabo todas las instrucciones de los programas de computadora al realizar las operaciones básicas aritméticas, lógicas, de control y de entrada / salida (E / S) especificadas por las instrucciones. Por esta razón, la CPU se describe a menudo como el cerebro de la computadora.

Pero en los últimos años, la GPU, que está diseñada para acelerar la creación de imágenes para su salida a un dispositivo de visualización, a menudo ha estado ayudando a la CPU a resolver problemas en áreas que anteriormente solo la CPU manejaba.

El fabricante de tarjetas gráficas Nvidia proporciona una forma sencilla de entender la diferencia fundamental entre una GPU y una CPU: “Una CPU consta de unos pocos núcleos optimizados para el procesamiento secuencial en serie, mientras que una GPU tiene una arquitectura masivamente paralela que consta de miles de dispositivos más pequeños y eficientes. núcleos diseñados para manejar múltiples tareas simultáneamente."

La capacidad de manejar múltiples tareas al mismo tiempo hace que las GPU sean muy adecuadas para algunas tareas, como buscar una palabra en un documento, mientras que otras tareas, como calcular la secuencia de Fibonacci, no se benefician en absoluto del procesamiento paralelo.

Sin embargo, entre las tareas que se benefician significativamente del procesamiento paralelo se encuentra el aprendizaje profundo, una de las habilidades más buscadas en la tecnología actual. Los algoritmos de aprendizaje profundo imitan la actividad en capas de neuronas en el neocórtex, lo que permite que las máquinas aprendan a comprender el lenguaje, reconocer patrones o componer música.

Como resultado de la creciente importancia de la inteligencia artificial, la demanda de desarrolladores que comprendan la computación de propósito general en una GPU se ha disparado.

CUDA frente a OpenCL frente a OpenACC

Debido a que las GPU entienden los problemas computacionales en términos de primitivas gráficas, los primeros esfuerzos para usar las GPU como procesadores de propósito general requirieron reformular los problemas computacionales en el lenguaje de las tarjetas gráficas.

Afortunadamente, ahora es mucho más fácil hacer computación acelerada por GPU gracias a plataformas de computación paralelas como CUDA, OpenCL u OpenACC de Nvidia. Estas plataformas permiten a los desarrolladores ignorar la barrera del idioma que existe entre la CPU y la GPU y, en cambio, centrarse en conceptos informáticos de nivel superior.

CUDA

Lanzado inicialmente por Nvidia en 2007, CUDA (Compute Unified Device Architecture) es el marco propietario dominante en la actualidad. "Con CUDA, los desarrolladores pueden acelerar drásticamente las aplicaciones informáticas aprovechando la potencia de las GPU", describe el marco Nvidia.

Los desarrolladores pueden llamar a CUDA desde lenguajes de programación como C, C ++, Fortran o Python sin ninguna habilidad en programación gráfica. Además, el kit de herramientas CUDA de Nvidia contiene todo lo que los desarrolladores necesitan para comenzar a crear aplicaciones aceleradas por GPU que superan en gran medida a sus contrapartes vinculadas a la CPU.

El SDK de CUDA está disponible para Microsoft Windows, Linux y macOS. la plataforma CUDA también es compatible con otras interfaces computacionales, incluidas OpenCL, DirectCompute de Microsoft, OpenGL Compute Shaders y C ++ AMP.

OpenCL

Lanzado inicialmente por Khronos Group en 2009, OpenCL es el estándar abierto libre de regalías más popular para la programación paralela multiplataforma. Según Khronos Group, “OpenCL mejora enormemente la velocidad y la capacidad de respuesta de un amplio espectro de aplicaciones en numerosas categorías de mercado, incluidos títulos de juegos y entretenimiento, software científico y médico, herramientas creativas profesionales, procesamiento de la visión y entrenamiento e inferencia de redes neuronales."

OpenCL ha sido implementado hasta ahora por Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx y ZiiLABS, y es compatible con todos los sistemas operativos populares en todas las plataformas principales, lo que lo convierte en extremadamente versátil. OpenCL define un lenguaje similar a C para escribir programas, pero existen API de terceros para otros lenguajes de programación y plataformas como Python o Java.

OpenACC

OpenACC es el estándar de programación más joven para la computación paralela que se describe en este artículo. Inicialmente fue lanzado en 2015 por un grupo de compañías que incluye a Cray, CAPS, Nvidia y PGI (el Grupo Portland) para simplificar la programación paralela de sistemas heterogéneos de CPU / GPU.

“OpenACC es un modelo de programación paralelo portátil de rendimiento basado en directivas dirigido por el usuario diseñado para científicos e ingenieros interesados ​​en portar sus códigos a una amplia variedad de arquitecturas y plataformas de hardware HPC heterogéneas con un esfuerzo de programación significativamente menor que el requerido con un nivel bajo modelo.,”Afirma OpenACC en su sitio web oficial.

Los desarrolladores interesados ​​en OpenACC pueden anotar el código fuente de C, C ++ y Fortran para indicarle a la GPU qué áreas deben acelerarse. El objetivo es proporcionar un modelo para la programación de aceleradores que sea portátil en todos los sistemas operativos y varios tipos de CPU y aceleradores de host.

Cual debo usar?

La elección entre estas tres plataformas informáticas paralelas depende de sus objetivos y del entorno en el que trabaja. Por ejemplo, CUDA se usa ampliamente en el mundo académico y también se considera el más fácil de aprender. OpenCL es, con mucho, la plataforma de computación paralela más portátil, aunque los programas escritos en OpenCL aún deben optimizarse individualmente para cada plataforma de destino.

Aprenda a codificar GPU en LinuxHint.com

Programación de GPU con Python

Programación de GPU con C++

Otras lecturas

Para familiarizarse con CUDA, le recomendamos que siga las instrucciones de la Guía de inicio rápido de CUDA, que explica cómo poner CUDA en funcionamiento en Linux, Windows y macOS. La Guía de programación OpenCL de AMD proporciona una descripción general fantástica y detallada de OpenCL, pero asume que el lector está familiarizado con los primeros tres capítulos de la especificación OpenCL. OpenACC ofrece un tutorial introductorio de tres pasos diseñado para demostrar cómo aprovechar la programación de GPU, y se puede encontrar más información en la especificación de OpenACC.

Los mejores juegos de Oculus App Lab
Si es propietario de un visor Oculus, debe estar informado sobre la descarga lateral. Sideloading es el proceso de instalación de contenido que no es ...
Los 10 mejores juegos para jugar en Ubuntu
La plataforma Windows ha sido una de las plataformas dominantes para juegos debido al gran porcentaje de juegos que se están desarrollando hoy para ad...
5 mejores juegos de arcade para Linux
Hoy en día, las computadoras son máquinas serias que se usan para jugar. Si no puede obtener la nueva puntuación más alta, sabrá a qué me refiero. En ...