Busco un poco de google, pero ahora no tengo claro si algunas GPU programadas con CUDA pueden aprovechar o pueden usar instrucciones similares a las de las extensiones SIME de SSE; por ejemplo, si podemos resumir dos vectores de flotantes en doble precisión, cada uno con 4 valores. Si es así, me pregunto si sería mejor usar hilos más ligeros para cada uno de los 4 valores anteriores del vector o usar SIMD.¿Puede CUDA usar extensiones SIMD?
Respuesta
Los programas CUDA se compilan al PTX instruction set. Ese conjunto de instrucciones no contiene instrucciones SIMD. Entonces, los programas CUDA no pueden hacer un uso explícito de SIMD.
Sin embargo, la idea de CUDA es hacer SIMD a gran escala. Los hilos individuales son parte de grupos llamados warps, dentro de los cuales cada hilo ejecuta exactamente la misma secuencia de instrucciones (aunque algunas de las instrucciones pueden ser suprimidas para algunos hilos, dando la ilusión de diferentes secuencias de ejecución). NVidia lo llama Single Instruction, Multiple Thread (SIMT), pero es esencialmente SIMD.
PTX 3.0 agregó soporte para un conjunto limitado de instrucciones SIMD en una palabra que operan con datos de 8 y 16 bits dentro de un registro. Estas instrucciones se detallan en las páginas 178-182 de la última especificación PTX: http://docs.nvidia.com/cuda/pdf/ptx_isa_3.1.pdf El uso de estas instrucciones SIMD requiere GPU con capacidad informática 3.x. Los desarrolladores de CUDA registrados pueden descargar un archivo de encabezado con funciones de contenedor, (que también proporcionan rutas de emulación para las GPU sm_1x y sm_2x) como se anunció aquí: https://devtalk.nvidia.com/default/topic/535684/announcements/release-1- 1-de-simd-in-a-word-functions-posted/ – njuffa
@njuffa: ¡Eso suena como una respuesta, no como un comentario! Publicarlo, y podemos persuadir flujo para cambiar su aceptar. –
Como se mencionó en a comment a una de las respuestas, NVIDIA GPU tiene algunas instrucciones SIMD. Operan en unsigned int
en base por byte y por media palabra. En julio de 2015, hay several flavours de las siguientes operaciones:
- valor absoluto
- suma/resta
- calcular el valor promedio
- comparación
- máximo/mínimo
- negación
- suma de la diferencia absoluta
- 1. (extensiones SIMD) SSE apoyo en gcc
- 2. SIMD o no SIMD - multiplataforma
- 3. C++ SSE SIMD framework
- 4. Archivos de encabezado para x36 SIMD intrinsics
- 5. Técnicas comunes de SIMD
- 6. SIMD el siguiente código
- 7. Lenguajes de programación SIMD
- 8. SIMD (AVX) comparar
- 9. ¿Puede python distutils compilar código CUDA?
- 10. ¿Cómo usar matrices 2D en CUDA?
- 11. ¿Cuál es el límite de optimización con SIMD?
- 12. ¿Cómo usar Winmerge con extensiones de Git?
- 13. ¿Es posible usar extensiones PECL en HipHop?
- 14. ¿Debo usar extensiones GHC Haskell o no?
- 15. Tabla de búsqueda utilizando SIMD
- 16. Cuándo usar componentes y cuándo usar extensiones en Yii?
- 17. C++ cómo escribir código que el compilador puede optimizar fácilmente para SIMD?
- 18. ¿Alguna extensión de Lisp para CUDA?
- 19. Obligar a CUDA a usar el registro para una variable
- 20. Cuándo usar extensiones de asociación frente a ámbitos nombrados?
- 21. Cómo usar HTML5 WebSockets para extensiones de Chrome
- 22. Codificando CUDA con C#?
- 23. ¿Cómo usar la memoria constante CUDA de forma agradable?
- 24. ¿Cómo usar extensiones y métodos de utilidad en el marcado?
- 25. Los tipos de vectores OpenCL usan SIMD
- 26. SSE (SIMD): multiplicar el vector por escalar
- 27. SIMD/SSE novato: filtro de imagen simple
- 28. Operaciones de árbol de vectorización (SIMD)
- 29. CUDA __threadfence()
- 30. Compilador CUDA (nvcc) macro
SSE es una característica de la CPU, no de las GPU. Supongo que te refieres a si hay controladores CUDA que usan instrucciones SSE en la CPU en lugar de las tarjetas de video (GPU). –
no. No sé muy bien el hardware de la GPU. Me preguntaba si las instrucciones SIMD pueden usarse en hilos CUDA en la GPU. – flow