2012-04-24 28 views
11

He leído que Microsoft está trabajando estrechamente con Nvidia para mejorar las prestaciones de AMP.Confusión en CUDA/openCL y C++ AMP

Pero mi pregunta es: ¿AMP es CUDA-replace by Microsoft? ¿O usa AMP controladores CUDA cuando hay una tarjeta de video NVIDIA CUDA disponible? ¿AMP es un sustituto de openCL?

Todavía estoy bastante confundido ..

+1

¿Importa si el compilador C++ - AMP genera código de máquina GPU directamente, o genera código C y lo pasa al compilador CUDA o OpenCL? De cualquier manera, escribe C++ - AMP en lugar de CUDA o OpenCL. –

+1

Además, no existe una "tarjeta de video CUDA". CUDA no se implementa en hardware, se convierte (compila) al conjunto de instrucciones nativas de la GPU (es decir, Fermi). –

+1

La [especificación AMP de C++] (http://download.microsoft.com/download/4/0/E/40EA02D8-23A7-4BD2-AD3A-0BFFFB640F28/CppAMPLanguageAndProgrammingModel.pdf) no hace mención de CUDA o OpenCL. – ildjarn

Respuesta

19

C++ AMP es una biblioteca (y como parte de ella también se introdujo una extensión del lenguaje de claves). Como C++ AMP es una especificación abierta, puede implementarse en cualquier otro idioma de bajo nivel. La implementación de Microsoft se basa en DirectCompute (y por lo tanto en HLSL), pero está completamente oculta para usted cuando usa C++ AMP (razón por la cual C++ AMP puede ser una especificación abierta, no expone DirectX en la superficie API). Para más información sobre C++ AMP, por favor siga los recursos a la derecha de nuestro blog (vamos a seguir añadiendo a eso): http://blogs.msdn.com/b/nativeconcurrency/

Usted hizo una declaración acerca de Microsoft trabajando con NVIDIA para mejorar el rendimiento de C++ AMP - que no es cierto. Microsoft ha trabajado con NVIDA, AMD y otros socios para crear la especificación abierta C++ AMP. Microsoft también trabaja con proveedores de hardware para asegurarse de que los proveedores de hardware tengan controladores de tarjeta de video estables, que son necesarios para que cualquier tecnología de cómputo GPU funcione correctamente.

Usted también expresó confusión y tiró algunos términos. OpenCL es una aproximación a la computación GPU (por Khronos), al igual que DirectCompute (de Microsoft), al igual que CUDA (por NVIDIA). Todas estas son tecnologías separadas, cada una con su propio camino a la GPU (siempre a través de un controlador de algún tipo), cada una con sus propios méritos, fortalezas y desventajas. Uno no reemplaza al otro, y uno no es universalmente mejor que el otro. Ahora también tiene C++ AMP en esa mezcla, como una opción más, y las mismas afirmaciones se aplican a eso. La elección es suya en cuanto a cuál decide usar.

+1

Gracias, ahora está finalmente claro. ¡Echaré un vistazo a tu blog inmediatamente! –

+0

Simplemente viendo su charla sobre "Computación heterogénea y C++ AMP" en Channel9. Extremadamente interesante. – Contango

3

C++ AMP es un conjunto de extensiones del lenguaje y las API para apoyar la tecnología de programación paralela incluyendo CUDA.

Dado que Microsoft también tiene un competidor directo de CUDA (Direct Compute) y generalmente ha preferido sus propios estándares de gráficos propietarios, tendremos que ver qué pasa realmente con él.

Para la visión de Microsoft en él ver these lectures

+4

C++ AMP es principalmente una biblioteca. Las extensiones de idioma son minúsculas: la restricción de la reasignación de palabras clave y el especificador de almacenamiento tile_static. Las cosas que piensas como C++ AMP - parallel_for_each, array_view, etc. son todas bibliotecas, no idiomas. De lo contrario, tu respuesta es válida. –

+1

@KateGregory - sí, no había entrado en detalles pero parecía tener algunos ganchos adicionales (como C++/CLR) así que pensé que era más seguro llamarlo extensión –

+3

Hola Martin, gracias por vincular mis capturas de pantalla. C++ AMP no tiene ninguna relación con CUDA. Creo que puede confundir el término de marketing CUDA con la tecnología CUDA, pero incluso entonces la especificación abierta de C++ AMP no tiene relación con CUDA, y la implementación de C++ AMP de Microsoft no tiene ninguna relación con CUDA. Además, C++ AMP no es un conjunto de extensiones de lenguaje, es principalmente una biblioteca. Como parte de C++ AMP, se introdujo una característica de lenguaje genérico, que no está vinculada a C++ AMP sino que solo es utilizada por C++ AMP en este momento. Además, no existe absolutamente ninguna relación entre C++ AMP y el CLR. –