Propósito General de cómputo en GPU (Unidad de Procesamiento de Gráficos), mejor conocido como programación de GPU, es el uso de una GPU junto con una CPU (Unidad Central de Procesamiento) para acelerar el cálculo en las aplicaciones tradicionalmente manejado sólo por la CPU.Aunque la programación de GPU ha sido prácticamente viable sólo para las últimas dos décadas, sus aplicaciones incluyen ahora prácticamente todas las industrias. Por ejemplo, programación de GPU ha sido utilizado para acelerar video, imagen digital, y procesamiento de señales de audio, la física estadística, la computación científica, médica de imágenes, visión por computador, las redes neuronales y el aprendizaje profundo, criptografía, e incluso la detección de intrusos, entre muchas otras áreas.
Este artículo sirve como una introducción teórica destinada a aquellos que quieran aprender a escribir con aceleración de la GPU programas, así como aquellos que tienen sólo un interés general en este fascinante tema.
Un largo tiempo antes de alta resolución, alta fidelidad de gráficos 3D se convirtió en la norma, la mayoría de los equipos no tenían la GPU. En su lugar, la CPU se llevaron a cabo todas las instrucciones de los programas de ordenador mediante la realización de las básicas de la aritmética, lógica, de control y de entrada/salida (I/O) de las operaciones especificadas en las instrucciones. Por esta razón, la CPU es a menudo descrito como el cerebro de la computadora.
Pero en los últimos años, la GPU, que está diseñado para acelerar la creación de imágenes para la salida a un dispositivo de pantalla, ha sido a menudo ayudar a la CPU resolver problemas en áreas que antes eran manejados únicamente por la CPU.
Fabricante de la tarjeta gráfica Nvidia proporciona una forma sencilla de cómo entender la diferencia fundamental entre una GPU y una CPU que: «UNA de la CPU se compone de un par de núcleos optimizado para la serie secuenciales de procesamiento, mientras que un GPU tiene una masivamente paralelo de la arquitectura que consta de miles de pequeños, más eficientes núcleos diseñado para el manejo de múltiples tareas al mismo tiempo.»
La capacidad de manejar múltiples tareas al mismo tiempo hace que la Gpu muy adecuado para algunas tareas, tales como la búsqueda de una palabra en un documento, mientras que otras tareas, tales como el cálculo de la secuencia de Fibonacci, no se benefician de procesamiento en paralelo en todos.
Sin embargo, entre las tareas que hacer beneficiarse significativamente de procesamiento en paralelo es el aprendizaje profundo, uno de los más solicitados después de habilidades en la tecnología de hoy en día. Aprendizaje profundo algoritmos que imitan la actividad de las capas de neuronas en la corteza cerebral, permitiendo máquinas para aprender a entender el lenguaje, reconocer los patrones deo componer música.
Como resultado de la creciente importancia de la inteligencia artificial, la demanda de los desarrolladores que entender el propósito general de cómputo en GPU se ha disparado.
Debido a que las Gpu de entender los problemas de cálculo en términos de gráficos primitivos, los primeros esfuerzos para el uso de GPUs como procesadores de propósito general requiere la reformulación de los problemas de cálculo en el lenguaje de las tarjetas gráficas.
Afortunadamente, ahora es mucho más fácil de hacer con aceleración de la GPU computing gracias a la computación en paralelo plataformas como Nvidia CUDA, OpenCLo OpenACC. Estas plataformas permiten a los desarrolladores para que ignore el idioma de la barrera que existe entre la CPU y la GPU y, en su lugar, se centran en el aumento de nivel de informática conceptos.
Publicado inicialmente por Nvidia en el 2007, CUDA (Compute Unified Device Architecture) es la dominante marco de propiedad en la actualidad. «Con CUDA, los desarrolladores son capaces de acelerar considerablemente las aplicaciones de computación, aprovechando la potencia de las GPUs,» describe el marco de Nvidia.
Los desarrolladores pueden llamar CUDA desde lenguajes de programación como C, C++, Fortran, o Python sin ningún tipo de habilidades en la programación de gráficos. Lo que es más, el CUDA Toolkit de Nvidia contiene todo lo que los desarrolladores necesitan para iniciar la creación de aceleración de la GPU para aplicaciones que en gran medida superar a sus CPU contrapartes.
El CUDA SDK está disponible para Microsoft Windows, Linux y macOS. la plataforma CUDA también es compatible con otras interfaces computacionales, incluyendo el OpenCL, Microsoft, DirectCompute, OpenGL Compute Shaders, y C++ AMP.
Publicado inicialmente por el Khronos Group en 2009, OpenCL el más popular es el abierto, libre de regalías estándar de la cruz-plataforma, la programación paralela. Según el Grupo Khronos, «OpenCL mejora en gran medida la velocidad y la capacidad de respuesta de un amplio espectro de aplicaciones en numerosos mercado categorías, incluyendo juegos y entretenimiento de los títulos, los científicos y médicos de software, profesionales de herramientas para la creación, procesamiento de visión, y el entrenamiento de la red neuronal y la inferencia.»
OpenCL ha sido implementado hasta ahora por Altera, AMD, Apple, BRAZO, Creativo, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx, y ZiiLABS, y es compatible con todos los sistemas operativos populares a través de todas las plataformas principales, por lo que es extremadamente versátil. OpenCL define un C como lenguaje para la escritura de programas, sino de terceros Api existen para otros lenguajes de programación y plataformas tales como Python o Java.
OpenACC es el más joven de programación estándar para la computación en paralelo se describe en este artículo. Fue lanzado inicialmente en el año 2015 por un grupo de empresas que componen Cray, GORRAS, Nvidia, e IGP (Portland Group) para simplificar la programación paralela heterogéneo de la CPU/GPU de los sistemas.
«OpenACC es un usuario impulsada por la directiva basada en el rendimiento portátil de programación paralela modelo diseñado para los científicos e ingenieros interesados en portar sus códigos para una amplia variedad de heterogénea HPC plataformas de hardware y arquitecturas significativamente con menos esfuerzo de programación que se requiere con un bajo nivel de modelo.,» los estados OpenACC en su página web oficial.
Los desarrolladores interesados en OpenACC puede anotar C, C++ y Fortran código fuente de decirle a la GPU que las áreas que deben ser acelerado. El objetivo es proporcionar un modelo para el acelerador de programación que es portable a través de los sistemas operativos y distintos tipos de host Cpu y los aceleradores.
Cuál Debo Usar?
La elección entre estas tres plataformas de computación en paralelo depende de tus objetivos y el entorno en el que trabajan. Por ejemplo, CUDA es ampliamente utilizado en la academia, y también se considera para ser el más fácil de aprender. OpenCL es, por mucho, la mayoría de los portátiles de computación paralela de la plataforma, aunque los programas escritos en OpenCL todavía necesita ser optimizada individualmente para cada plataforma.
La GPU de la Programación con Python
GPU Programación con C++
Para familiarizarse con CUDA, le recomendamos que siga las instrucciones que aparecen en la CUDA Guía de Inicio Rápidoel que se explica cómo obtener CUDA y que se ejecuta en Linux, Windows y macOS. AMD OpenCL Guía de Programación ofrece una fantástica, en la profundidad de la visión general de OpenCL, pero se supone que el lector está familiarizado con los tres primeros capítulos de la OpenCL Especificación. OpenACC ofrece un tres pasos del tutorial de introducción diseñado para demostrar cómo tomar ventaja de la programación de GPU, y se puede encontrar más información en el OpenACC especificación.