Programación de GPUs Usando Compute Unified Device Architecture (CUDA)

Usando Compute Unified Device Architecture (CUDA)

El gran aumento en el rendimiento del hardware gráfico, junto con mejoras recientes en su programabilidad, han hecho de dicho hardware un referente como plataforma para las tareas de cómputo exigentes en una gran variedad de dominios de uso. Los últimos años ha crecido el interés en los conocidos colectivamente como GPGPU (Unidades de procesamiento gráfico de propósito general).
La formación de especialistas en el uso de GPUs (Unidades de Procesamiento Gráfico) es importante no sólo para la aceleración de juegos por ordenador y aplicaciones multimedia; sino para la aceleración de aplicaciones científicas de todo tipo (inteligencia y visión artificial, robótica, medicina, física, química, matemáticas, biología, computación gráfica y muchos otros.
El objetivo de este libro es iniciar a la programación de GPUs dando una visión general de los principales conceptos, pero también de aspectos avanzados y aplicaciones científicas.

Colección
Profesional
Materia
Hardware
Idioma
  • Castellano
EAN
9788499648552
ISBN
978-84-9964-855-2
Páginas
172
Ancho
17 cm
Alto
24 cm
Edición
1
Fecha publicación
09-03-2020
Edición en papel
17,91 €
Descuento 10%19,90 €

456,36 MX$18,78 US$
También disponible en

Índice de contenido

Índice general
Resumen I
Prólogo III
Agradecimientos V
1. El Nacimiento del Paradigma GPGPU 1
1.1. Hacia la Unidad de Procesamiento Gráfico
1.1.1. El Pipeline Gráfico de Función Fija
1.1.2. La Unidad de Procesamiento Gráfico
1.1.3. La Llegada de los Gráficos Programables
1.2. Primeros Pasos en Computaci´on sobre GPUs
1.3. Evolución y Estancamiento de las CPUs
1.4. El Ascenso de la Computaci´on sobre GPUs
2. Introducción a CUDA
2.1. Arquitectura Hardware
2.1.1. Situación Física e Interconexión .
2.1.2. Single Instruction Multiple Threads (SIMT)
2.1.3. Streaming Multiprocessors (SMs)
2.2. Arquitectura Software
2.2.1. Capas .
2.2.2. Compilación (NVCC y PTX)
2.2.3. Conceptos básicos
2.2.4. Flujo de Ejecución
2.3. Evolución Generacional
2.3.1. Microarquitecturas
2.3.2. CUDA Toolkit
2.3.3. NVIDIA-SMI
2.3.4. Device Query
2.3.5. CUDA Compute Capability
3. Modelo de Procesamiento
3.1. Lanzamiento de Kernels
3.2. Mallas, Bloques, Hilos, Warps y Lanes
3.3. Limitaciones de Memoria
3.4. Limitaciones de Tiempo
3.5. Escalabilidad Transparente y Planificación
3.6. Métodos de Sincronización
3.7. Control de flujo
4. Memorias CUDA
4.1. Jerarquías de Memorias
4.2. Memoria en el Host (CPU)
4.2.1. Pinned memory
4.3. Memoria en el Device (GPU)
4.3.1. Memoria Global
4.3.2. Cantidad de Memoria Global Disponible
4.3.3. Transferencia de Datos de Memoria CPU a GPU
4.3.4. Reserva Estática de Memoria Global
4.3.5. Memoria Local
4.3.6. Registros
4.3.7. Memoria de Constantes
4.3.8. Memoria de texturas
4.3.9. Memoria compartida
4.3.10. Ejemplo de Convolución 1D con Memoria Compartida
4.4. Consideraciones de Rendimiento
4.5. Exprimiendo el Ancho de Banda de la Memoria Global
5. Patrones Paralelos
5.1. Reducción de un vector
5.1.1. Implementación CPU
5.1.2. Implementación GPU Basico
5.1.3. Optimización con Acceso Coalescente
5.1.4. Optimización con Memoria Compartida
5.2. Histograma
5.2.1. Implementación CPU
5.2.2. Implementación GPU Basico
5.2.3. Implementación para un Tamaño Arbitrario
5.2.4. Implementación con Histograma Privatizado
5.3. Scan
5.3.1. Implementación CPU
5.3.2. Scan de Hillis-Steele
5.3.3. Scan de Blelloch
6. Aspectos Avanzados
6.1. CUDA Streams y uso de múltiples GPUs
6.2. Medición de Tiempos y Eventos
6.3. Paralelismo Dinámico (CUDA 5.0)
6.4. Memoria Unificada (CUDA 6.0)
6.5. Precisión Mixta (CUDA 8.0)
6.6. Primitivas de Warps (CUDA 9.0)
6.7. Interoperabilidad con OpenGL
7. Estrategias de Paralelización para el Algoritmo de la Colonia
de Hormigas en la GPU
7.1. Ant Colony Optimization para el Travelling Salesman Problem
7.2. Estrategias de paralelización
7.2.1. Construcción de los caminos (Tour construction)
7.2.2. Actualización de feromonas
7.2.3. Fusión de las fases principales
7.3. Experimentos
7.3.1. Hardware
7.3.2. Conjuntos de datos y configuración del algoritmo
7.3.3. Evaluación de la etapa de construcción de los caminos
7.3.4. Evaluación de Actualización de Feromonas
7.3.5. Comparación Global de ACO
7.4. Conclusiones y Trabajo Futuro
8. rCUDA (remote CUDA)
8.1. ¿Por qué rCUDA?
8.2. ¿Qué es rCUDA?
8.3. Otras soluciones similares a rCUDA
8.4. ¿Còmo funciona rCUDA?
8.4.1. Configuración del servidor de licencias de rCUDA
8.4.2. Configuración del servidor rCUDA
8.4.3. Configuración del cliente rCUDA
8.5. Beneficios proporcionados por rCUDA
A. Cuestiones
Bibliografía