Desde hace tiempo AMD, NVIDIA y Microsoft han estado impulsando un lenguaje de programación que potencia el cómputo paralelo en una serie de arquitecturas de cómputo como CPU multi-núcleos y GPU con gran capacidad de cómputo paralelo y en este sentido el lenguaje C++ AMP (Accelerated Massive Parallelism) ha ido pavimentando el camino para aprovechar al máximo las capacidades de las CPUs y GPUs actuales.
Breve Reseña
Antes de continuar con la nota les haremos una breve reseña sobre C++ AMP. Este es un lenguaje de programación y desarrollo basado en C++, anunciado por primera vez en junio de 2011 en el marco de la AMD Fusion Developer Summit 2011 y que Microsoft ha implementado en su herramienta de programación VisualStudio 11 y posteriores. Este lenguaje pretende ser una ayuda a los desarrolladores para usar aceleradores como GPU y CPUs Multi-núcleos para programación paralela.
AMP ha sido desarrollado por Microsoft en colaboración de AMD y NVIDIA, por lo que productos de ambas compañías (GPUS) podrán potenciar las aplicaciones desarrolladas con C++ AMP a través del la API DirectCompute de Microsoft DirectX, aunque las especificaciones publicadas por Microsoft también permiten la implementación de estándares abiertos como OpenGL/OpenCL.
Lo anterior es un avance desde el punto de vista de la interoperabilidad, aunque en teoría C++ AMP eventualmente es un competidor de OpenCL (basada en C), que también es un estándar abierto y destinado a computación paralela heterogénea.
Anuncio de AMD
AMD en colaboración con Microsoft ha anunciado el lanzamiento de C ++ AMP versión 1.2, un compilador C++ de código abierto que implementa la versión 1.2 de la especificación abierta para C ++ AMP, disponible por primera vez tanto en Linux y Windows.
El lanzamiento representa otro paso adelante hacia la meta de AMD de apoyar soluciones multiplataforma, múltiples lenguajes de programación y continúa con las contribuciones a la comunidad de código abierto. La herramienta, que aprovecha Clang y LLVM, acelera la productividad y facilidad de uso para los desarrolladores que deseen aprovechar toda la potencia de las plataformas se servidores heterogéneos, PCs y dispositivos de mano.
C ++ AMP versión 1.2 permite a los desarrolladores de C ++ acelerar las aplicaciones a través de un amplio conjunto de configuraciones de hardware y software mediante el apoyo a tres salidas:
Khronos Group OpenCL, soportando CPU AMD/APU/GPU, CPU/APU Intel, NVIDIA GPU, Apple Mac OS X y otras plataformas compatibles con OpenCL.
Khronos Group SPIR, soportando CPU AMD/APU/GPU, CPU/APU Intel y futuras plataformas compatibles SPIR; y
HSA Fundación HSAIL, soportando APU AMD y futuras plataformas compatibles con HSA.
Una característica clave de rendimiento de la versión 1.2, es la especificación de código abierto C ++ AMP, soporte para memoria física compartida, lo que simplifica enormemente el intercambio de datos entre la CPU y la GPU en plataformas heterogéneas.
Las Plataformas heterogéneas construidas en la nueva especificación permite a los programadores beneficiarse de la sobrecarga minimizada de copias de datos al acelerar las aplicaciones