Tutorial CUDA Univ. de Santiago. 6 y 7 de Agosto, 2013



Documentos relacionados
El proceso de edición digital en Artelope y CTCE

PREPARANDO EL ENTORNO DE DESARROLLO PARA PROGRAMAR EN PHP. DESCARGAR E INSTALAR NOTEPAD++ (CU00808B)

Tutorial de Introducción a la Informática Tema 0 Windows. Windows. 1. Objetivos

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

Árbol binario. Elaborado por Ricardo Cárdenas cruz Jeremías Martínez Guadarrama Que es un árbol Introducción

En esta unidad añadiremos información sobre EXT3 y trabajaremos con aspectos visibles que nos proporcionan estos sistemas de archivos.

GE Power Management. 6S``O[WS\bORS1]\TWUc`OQWÕ\g. GE-FILES 7\ab`cQQW]\Sa 539$ &

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Se encarga de realizar las funciones básicas de manejo y configuración del ordenador. La BIOS tiene más tareas fundamentales: Chequearse a sí misma.

Administración de la producción. Sesión 11: Gestor de Base de Datos (Access)

Creación de nuevos modelos a partir de otros ya existentes.

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

Sistemas Operativos. Curso 2016 Procesos

Ahora comencemos!... Las operaciones matemáticas fundamentales pueden realizarse de forma rápida y sencilla con Miicrosofftt Excell.

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

Introducción. Instalación. Inicio

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

Capítulo 4 Procesos con estructuras de repetición

Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía.

Manual de usuario - Funcionalidades

Base de datos en la Enseñanza. Open Office

Publicación del sitio web en internet. Equipo 6

MANUAL DE CS-ALMACENES (MAYO 2012)

NORMA (SEPA) 22/11/2013

ARREGLOS DEFINICION GENERAL DE ARREGLO

Centro de Capacitación en Informática

Manual de Instrucciones

Uso del programa CALC

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Módulo II - PowerPoint

GIROS Bancarios en NOTIN

La extensión de geoprocesamiento de gvsig permite aplicar una serie de procesos

Sitios remotos. Configurar un Sitio Remoto

ESFINGE Estadísticas de las Industrias del Gas Manual de Usuario Ciudadano ÍNDICE

Tema 2. Diseño del repertorio de instrucciones

El catálogo y los listados

Jefe del Servicio de Contratación y Patrimonio

Capítulo 4 Gestión de memoria

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

MANUAL DE MI MAQUINA DE APRENDER INGLES

GENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B)

L3 ORGANIZACIÓN DE ARCHIVOS ELECTRÓNICOS

Introducción a la Computación

Para ingresar al mismo debes hacer click en el ícono correspondiente en el panel de control.

Reconocimiento de Créditos Automatizado. Módulo de Gestión

Manual Impress Impress Impress Impress Impress Draw Impress Impress

Cómo puede mi organización registrar plazas de trabajo?

Curso de Doctorado: Tecnologías de Objetos

USO DEL COMANDO. Fdisk. Autor :. Alejandro Curquejo. Recopilación :. Agustí Guiu i Ribera. Versión :.. 1.0

MANUAL DE CS-ALMACENES

Construcción de Escenarios

La Red Social de Rotary (Distrito 2203) Rotarians INSTRUCCIONES BÁSICAS

MANUAL DE AYUDA MÓDULO GOTELGEST.NET PREVENTA/AUTOVENTA

FICHERO DE AYUDA DEL PROGRAMA MEGAEURO

Conceptos de redes. LAN (Local Area Network) WAN (Wide Area Network)

MATERIAL 2 EXCEL 2007

Servicio de groupware

Versión 1 Fecha Vigencia: Junio de 2011

Administración avanzada de paquetes. apt-proxy.

UNIDAD EJECUTORA DE CONSERVACION VIAL MANUAL DEL USUARIO DEL SISTEMA INTEGRAL DE CONTROL DE PROYECTOS

Desarrollo de Aplicaciones Web-Parte 2

GUÍA PGA SISTEMA EXTRANJERO

MANUAL DE USUARIO. Convocatoria 2013 Fundación para la Prevención de Riesgos Laborales IT-0103/2013 Prevengra 4

MANUAL DE CÓMO REALIZAR ANEXOS A LAS FACTURAS DE TRATAMIENTO DE PRÓTESIS

VENTAJAS Y DESVENTAJAS DE LAS TECNOLOGIAS

Figura 1 Abrir nueva hoja de cálculo

Teclado sobre una PDA para Personas con Parálisis Cerebral

Figura 1. Pantalla principal de la aplicación. Bits de inteligencia. Nos lleva al espacio dedicado a este tema.

Modulo 1 El lenguaje Java

Base de datos en Access

FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013

Act 1: Revisión de Presaberes. Lectura No. 1. Título de la Lectura: El Computador

WEB MANUAL 1.INICIO 2.SESIONES

PRÁCTICAS DE GESTIÓN GANADERA:

RESUMEN EJECUTIVO EFECTOS DEL RUIDO EN LA SALUD

Software para Seguimiento de Clientes. Descripción del Producto

LINUX - Los archivos de órdenes I

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

2. ABRIR UN NUEVO DOCUMENTO DE TRABAJO

SISTEMAS INFORMÁTICOS EN TIEMPO REAL 2º Ingeniería Industrial MANUAL DE HERRAMIENTAS SOFTWARE PARA PROGRAMACIÓN EN UNIX

MÉTODO DEL CAMBIO DE BASE PARA CÁLCULO MANUAL DE SUBREDES CON IP V4.0

Para crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas.

INDEX GUÍA INSTRUCTIVA PARA PASOS INICIALES DEL SITE BUILDER

Programa de Fabricación para Android

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

Módulo 8: Ofimática básica. Unidad didáctica 4: Introducción y modificación de datos. Access

Centro de Capacitación en Informática

Componente com_weblinks para listados de enlaces web a modo de directorio en Joomla. (CU00442A)

Ofimática Aplicada UNIDAD II : HERRAMIENTAS DE ESCRITORIO WORD

Estructuras de datos: Proyecto 2

Esquema Presentación

REPUBLICA DE COLOMBIA PROGRAMA DE LAS NACIONES UNIDAS PARA EL DESARROLLO PNUD

Google Drive. Registro y gestión de archivos. Manual de uso

Curso Internet Básico - Aularagon

PROPUESTAS COMERCIALES

1. Ingresa a la siguiente dirección en la fecha y horario que se te asignó.

Historial de Versiones: Velneo vversion. Funcionamiento. Repositorio de versiones. Funcionalidades del Historial de Versiones. Bloquear.

Transcripción:

Tutorial CUDA Univ. de Santiago. 6 y 7 de Agosto, 2013 La suma por reducción Este código realiza la suma de un vector de N elementos mediante un operador binario de reducción, es decir, en log 2 (N) pasos. Suponemos un N suficientemente grande como para que requiera la comunicación intra-bloque e inter-bloque entre los hilos CUDA implicados en la computación. Conceptos que pondremos en práctica Cómo alojar y liberar memoria en el dispositivo. Cómo copiar datos entre los distintos espacios de memoria. Cómo realizar la reducción suma en la GPU. Realizar mediciones del tiempo de ejecución y los conflictos en el acceso a bancos de memoria compartida usando el CUDA profiler. Observar cómo los distintos esquemas de reducción afectan al número de conflictos en accesos a bancos de memoria compartida. Cómo acceder a los ficheros fuente Se encuentran dentro del directorio Codigos/projects del paquete básico del tutorial. En este caso, proponemos dos opciones, una para alumnos con poca o ninguna experiencia en programación con CUDA, y otra para valientes alumnos con más experiencia en programación con CUDA. Nivel de dificultad 1: utilizad los ficheros del subdirectorio lab1.2-reduction.1. Nivel de dificultad 2: utilizad los ficheros del subdirectorio lab1.2-reduction.2. Reducciones El objetivo de este ejercicio es familiarizarse con un tipo de operaciones muy común en computación científica: las reducciones. Una reducción es una combinación de todos los elementos de un vector en un valor único, utilizando para ello algún tipo de operador asociativo. Las implementaciones paralelas aprovechan esta asociatividad para calcular varias operaciones en paralelo, calculando el resultado en O(logN) pasos sin incrementar el número de operaciones realizadas. Un ejemplo de este tipo de operación se muestra en la siguiente figura: cms.ac.uma.es/gpu/index.php/codigos-a-desarrollar/suma-por-reduccion 1/6

Modificaciones a realizar sobre el código CUDA Paso 1 Modi fica la función computeondevice(... )de finida en vector_reduction.cu. Primera parte del código: 1. Reserva memoria en el dispositivo. 2. Copia los datos de entrada desde la memoria del host hasta la memoria del dispositivo. 3. Copia los resultados desde la memoria de dispositivo de vuelta a la memoria del host. Paso 2: En el fi chero vector_reduction_kernel.cu, modifi ca la función para implementar el esquema de reducción que hemos ilustrado en la anterior figura. Tu implementación debería usar memoria compartida para incrementar la eficiencia. Segunda parte del código: 1. Carga datos desde memoria global a memoria compartida. 2. Realiza la reducción sobre los datos en memoria compartida. 3. Almacena de vuelta los datos en memoria compartida. cms.ac.uma.es/gpu/index.php/codigos-a-desarrollar/suma-por-reduccion 2/6

Paso 3: Una vez fi nalizado el código, simplemente utiliza el script de lanzamiento que encontrarás en el directorio de trabajo para compilar y ejecutar el código en la GPU. Esta aplicación tiene dos modos de operación distintos. La única diferencia es la entrada que se le proporciona tanto a las implementaciones en GPU y en CPU del código de reducción. En cualquier caso, la versión sobre GPU siempre es ejecutada primero, seguida de la versión sobre CPU, que sirve como referencia para comprobar el resultado. Si el resultado es correcto, se imprime por pantalla la frase Test Passed. En caso contrario, se imprime la frase Test Failed. Sin argumentos: El programa crea un array de datos aleatorios como entrada a las funciones de reducción. Para ejecutarlo: $>../../bin/linux/release/vector_reduction Con un argumento: El programa utiliza el fi chero de datos asociado como entrada a las dos implementaciones de la reducción. Para ejecutarlo: $>../../bin/linux/release/vector_reduction data.txt Ten en cuenta que, en este caso, los ejercicios no proporcionan información sobre tiempos de ejecución. Si lo deseas, intenta añadir esta información a tus implementaciones. De cualquier modo, extraeremos dicha temporización directamente del CUDA profi ler. La salida del programa correcto debería tener este aspecto: Test PASSED device: host: Input vector: random generated. Paso 4 (opcional, en función del tiempo, pasaremos al Paso 5): Una vez hayas implementado el esquema de reducción mostrado en la anterior figura, compararemos los resultados con otros dos esquemas de reducción. Edita la función reduction(... )en el fi chero vector_reduction_kernel.cu, donde todavía hay dos esquemas vacíos por implementar. Los esquemas corresponden con los de las cms.ac.uma.es/gpu/index.php/codigos-a-desarrollar/suma-por-reduccion 3/6

siguientes figuras: ESQUEMA 2 ESQUEMA 3 En el esquema mostrado en la segunda estrategia de reducción, cada thread es responsable de la suma de dos nodos adyacentes en una distancia potencia de 2 para cada nivel de la operación. En la tercera estrategia, cada thread es responsable de la suma de dos nodos en distancias que van desde n-1 hasta 1. Por ejemplo, en el primer nivel de la operación, el thread número 1 suma los elementos 1 y 8, siendo la distancia entre los dos nodos 8-1 = 7. El thread número 2 suma los elementos 2 y (8-1). La distancia correspondiente es pues 7-2 = 5. cms.ac.uma.es/gpu/index.php/codigos-a-desarrollar/suma-por-reduccion 4/6

Y las distancias para los nodos sumados por los threads número 3 y 4 son 6-3 = 2 y 5-4 = 1, respectivamente. Tened en cuenta el patrón de acceso regular en ambos esquemas. La mayoría de aplicaciones utilizan patrones de este tipo para eliminar divergencias innecesarias o conflictos en accesos a bancos de memoria. Paso 5: Una vez fi nalizado el código, utiliza la siguiente orden para activar el CUDA pro filer. También existe una versión gráfi ca del profi ler, aunque en este caso no la utilizaremos. $> CUDA_PROFILE=1 CUDA_PROFILE_CONFIG=./profile_config \../../bin/linux/release/vector_reduction Por defecto, el fi chero de salida para el CUDA pro filer es cuda_profi le.log. Más abajo verás un ejemplo de ejecución: 1. gputimemuestra los microsegundos que necesita cada kernel CUDA para ser ejecutado. 2. l1_shared_bank_conflict se refi ere al número de threads en un warp ejecutados secuencialmente. En otras palabras, realmente se refi ere al número de conflictos en el acceso a bancos de memoria compartida. En el ejemplo, no hay conflictos. Z9reductionPfies el nombre dado por el runtime CUDA a la función reduction(... ). 3. shared_load y shared_storese refieren al número de accesos en modo lectura y escritura en memoria compartida, respectivamente. Un posible resultado de la ejecución del programa utilizando el profiler de CUDA es el siguiente: # CUDA_PROFILE_LOG_VERSION 2.0 # CUDA_DEVICE 0 GeForce GTX 480 # TIMESTAMPFACTOR fffff7067548c2a0 method,gputime,cputime,occupancy,l1_shared_bank_conflict,shared_load,shared_store method=[ memcpyhtod ] gputime=[ 2.656 ] cputime=[ 5.000 ] method=[ _Z9reductionPfi ] gputime=[ 7.680 ] cputime=[ 24.000 ] occupancy=[ 0.167 ] l1_shared_bank_conflict=[ 209 ] shared_load=[ 33 ] shared_store=[ 36 ] method=[ memcpydtoh ] gputime=[ 1.312 ] cputime=[ 14.000 ] Compara los valores de l1_shared_bank_conflict y gputimepara cada uno de los tres esquemas de cms.ac.uma.es/gpu/index.php/codigos-a-desarrollar/suma-por-reduccion 5/6

reducción implementados. Cuál de ellos es el más rápido? Existen multitud de contadores que podemos consultar para averiguar los puntos débiles de nuestro código. Si tienes curiosidad, puedes encontrar mucha más información en el fichero /opt/cuda_3.1/doc/compute_profiler_3.1.txtde la máquina que estamos utilizando para desarrollo. Esquema l1_shared_bank_conflict gputime 1 2 3 cms.ac.uma.es/gpu/index.php/codigos-a-desarrollar/suma-por-reduccion 6/6