Título: Aceleración De Aplicaciones Científicas Mediante Gpus. Alumno: Diego Luis Caballero De Gea. Directores: Xavier Martor
Total Page:16
File Type:pdf, Size:1020Kb
Título: Aceleración de Aplicaciones Científicas mediante GPUs. Alumno: Diego Luis Caballero de Gea. Directores: Xavier Martorell Bofill (UPC), Juan Fernández Peinador (UM) y Javier Cuenca Muñoz (UM). Departamento: Arquitectura de Computadores (UPC) y Arquitectura y Tecnología de Computadores (UM). Fecha: Junio de 2010. Universidad de Murcia Universidad Politécnica de Cataluña Facultad de Informática Aceleración de Aplicaciones Científicas mediante GPUs Proyecto Fin de Carrera Diego Luis Caballero de Gea Junio de 2010 Dirigido por: Xavier Martorell Bofill Departamento de Arquitectura de Computadores. Universidad Politécnica de Cataluña. Juan Fernández Peinador Departamento de Arquitectura y Tecnología de Computadores. Universidad de Murcia. Javier Cuenca Muñoz Departamento de Arquitectura y Tecnología de Computadores. Universidad de Murcia. Índice General Abstract ........................................................................................................................... 14 1. Introducción y Contexto del Proyecto .................................................................... 15 1.1 Introducción ..................................................................................................... 15 1.2 Contexto del Proyecto ...................................................................................... 16 1.3 Estructura del Documento ............................................................................... 17 1.4 Planificación Inicial ......................................................................................... 17 1.5 Estimación de Costes ....................................................................................... 17 2. Estado del Arte ....................................................................................................... 18 2.1 Evolución de las CPUs y las GPUs ................................................................. 18 2.2 CUDA: Compute Unified Device Architecture ............................................... 20 2.2.1 Visión General de la Arquitectura de una GPU ....................................... 21 2.2.2 Modelo de Ejecución ................................................................................ 22 2.2.3 Modelo de Memoria ................................................................................. 27 2.2.4 Compute Capabilities ............................................................................... 32 3. Objetivos y Metodología ........................................................................................ 35 3.1 Análisis de Objetivos ....................................................................................... 35 3.2 Metodología ..................................................................................................... 35 3.3 Sistemas Utilizados .......................................................................................... 36 3.4 Línea Base, Medidas y Métricas ...................................................................... 38 3.5 Herramientas .................................................................................................... 38 3.5.1 CUDA Visual Profiler .............................................................................. 38 3.5.2 CUDA Occupancy Calculator .................................................................. 40 3.5.3 CUDA GDB ............................................................................................. 41 3.5.4 CUDA Memcheck .................................................................................... 42 3.5.5 Gprof ......................................................................................................... 43 4. Aceleración de Aplicaciones mediante GPUs ........................................................ 44 4.1 Descripción de las Técnicas de Optimización ................................................. 45 4.1.1 Memoria Compartida ................................................................................ 45 4.1.2 Algoritmo de Reducción Parcial en GPU ................................................. 46 4.1.3 Mejorando el Coalecing mediante Estrategias de Mapeo de Threads ...... 48 4.1.4 Saltos Divergentes y Predicación de Saltos .............................................. 49 4.1.5 Maximizando la ocupación de la GPU ..................................................... 50 4.1.6 Memoria Pinned y Zero Copy .................................................................. 51 4.1.7 Memoria Constante .................................................................................. 53 4.1.8 Memoria de Texturas ................................................................................ 54 3 4.1.9 Enfoque Multi-GPU (CUDA + OpenMP) ................................................ 55 4.1.10 Enfoque Multi-GPU Multi-Nodo (CUDA + OpenMP + MPI) ................ 58 4.2 Embarrassingly Parallel (NAS Parallel Benchmarks) ..................................... 59 4.2.1 Versión Inicial en CUDA ......................................................................... 61 4.2.2 Memoria Compartida + Reducción Parcial en GPU ................................ 63 4.2.3 Mejorando la Ocupación .......................................................................... 65 4.2.4 Uso de Memoria Pinned ........................................................................... 67 4.2.5 Zero Copy ................................................................................................. 67 4.2.6 Memoria Local vs Memoria Global ......................................................... 67 4.2.7 Unrolling ................................................................................................... 68 4.2.8 Enfoque Multi-GPU ................................................................................. 69 4.2.9 Conclusiones ............................................................................................. 71 4.3 Conjugate Gradient (NAS Parallel Benchmarks) ............................................ 73 4.3.1 Versión Inicial en CUDA ......................................................................... 77 4.3.2 Mapear Warps sobre filas ......................................................................... 80 4.3.3 Mapear Half-Warps sobre filas ................................................................ 83 4.3.4 Padding ..................................................................................................... 83 4.3.5 Memoria Constante .................................................................................. 85 4.3.6 Memoria Pinned ....................................................................................... 85 4.3.7 Memoria de Texturas sobre P ................................................................... 86 4.3.8 Memoria de Texturas sobre rowstr, colidx y a ......................................... 87 4.3.9 Enfoque Multi-GPU ................................................................................. 89 4.3.10 Conclusiones ............................................................................................. 91 4.4 Fourier Transform Dock (FTDock) ................................................................. 93 4.4.1 Versión Inicial en CUDA ......................................................................... 97 4.4.2 Migración Completa a la GPU. Evitando Transferencias de Datos ......... 98 4.4.3 Buffering de Escrituras en Disco ............................................................ 104 4.4.4 Enfoque Multi-GPU ............................................................................... 104 4.4.5 Enfoque Multi-GPU Multi-Nodo ........................................................... 106 4.4.6 Enfoque Multi-GPU Multi-Nodo. Distribución de Carga Heterogénea . 108 4.4.7 Conclusiones ........................................................................................... 109 4.5 Comparación con otras Arquitecturas ............................................................ 110 5. Planificación Final ................................................................................................ 113 5.1 Planificación Final ......................................................................................... 113 5.2 Coste del proyecto ......................................................................................... 113 6. Conclusiones y Vías Futuras ................................................................................ 114 6.1 Conclusiones .................................................................................................. 114 4 6.2 Vías futuras .................................................................................................... 115 7. Bibliografía y Referencias .................................................................................... 116 I. Utilidades Auxiliares Desarrolladas ..................................................................... 119 I.1. Función cudaInit ............................................................................................ 119 I.2. Macros CHECK_CUDA y CHECK_CUFFT ................................................ 120 I.3. Shell Scrips timing_NPB.sh y timing_ftdock.sh ............................................ 121 II. Profilings .............................................................................................................. 124 II.1. EP CUDA Profilings ...................................................................................... 125 II.2. CG CUDA Profilings ....................................................................................