Introducción a Cómputo Paralelo con CUDA C/C++

Documentos relacionados
Introducción a Cómputo Paralelo con CUDA C/C++

CUDA: MODELO DE PROGRAMACIÓN

Primeros pasos con CUDA. Clase 1

Alejandro Molina Zarca

CUDA (Compute Unified Device Architecture)

CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS

INTRODUCCIÓN A LA PROGRAMACIÓN DE GPUS CON CUDA

Segunda Parte: TECNOLOGÍA CUDA

GPGPU ( GENERAL PURPOSE COMPUTING ON GRAPHICS PROCESSING UNITS)

Francisco J. Hernández López

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU

Preparación y Adaptación de Códigos Científicos para su Ejecución Paralela TICAL 2018

Francisco J. Hernández López

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS

Librería Thrust. Clase 4.

GPU-Ejemplo CUDA. Carlos García Sánchez

GPGPU Avanzado. Sistemas Complejos en Máquinas Paralelas. Esteban E. Mocskos 5/6/2012

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU

Francisco Javier Hernández López

Modelo de aplicaciones CUDA

Programación de una GPU con CUDA

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

V. OPTIMIZACIÓN PARA COMPUTACIÓN GPU EN CUDA

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Memorias, opciones del compilador y otras yerbas. Clase 3

UNIVERSIDAD DE BURGOS Área de Tecnología Electrónica INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA

CUDA Overview and Programming model

Arquitecturas GPU v. 2015

Trabajo Fin de Grado Grado en Ingeniería de Tecnologías Industriales.

SUMA de Vectores: Hands-on

DESARROLLO DE APLICACIONES EN CUDA

Introducción a la Arquitectura y Plataforma de Programación de Cómputo Paralelo CUDA (36 hrs) Instructor M. en C. Cristhian Alejandro Ávila-Sánchez

Computación en procesadores gráficos

INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA. Francisco Javier Hernández López

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

ALGORITMO DE CÁLCULO DE CÁPSULAS CONVEXAS

Guía práctica de estudio 05: Diagramas de flujo

Computación en procesadores gráficos

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

Razón de ser Computadora Programa Programador Análisis y solución de problemas (Metodología) Algoritmo Diagrama de flujo

Programación. Carrera: MAE 0527

Carrera: Participantes Miembros de la academia de Metal- Mecánica

48 ContactoS 84, (2012)

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Paralelización sobre GPU del Algoritmo de Eliminación de Gauss-Jordan para la Solución de Sistemas de Ecuaciones Lineales

Carrera: EMZ Participantes Representante de las academias de ingeniería Electromecánica de los Institutos Tecnológicos.

Técnicas de paralelización de código para robots basados en emociones

Ejemplos de optimización para Kepler Contenidos de la charla [18 diapositivas]

Dep. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla

Fragata Escuela Libertad

ALGORITMOS II PSEUDOCODIGOS INTRODUCCION AL PSEINT CORPODICES VICTOR ANDRES OCHOA CORREA

Introducción a OpenGL Shading Language (GLSL)

DISEÑO CURRICULAR ARQUITECTURA DEL COMPUTADOR

Estructura de Datos ARREGLOS

Programación Orientada a Objetos en C++

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACION DE COMPUTACION

PROGRAMACIÓN E IMPLEMENTACIÓN DE UN CLÚSTER

Curso Informática Lección 4. Instrucciones de control

Tema: Clases y Objetos en C#. Parte II.

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 5 Programación Avanzada y Optimización

Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico.

Necesidad de Protección

Desarrollo de una aplicación de audio multicanal utilizando el paralelismo de las GPU

Arquitecturas y programación de procesadores gráficos. Nicolás Guil Mata Dpto. de Arquitectura de Computadores Universidad de Málaga

FUNDAMENTOS DE INFORMÁTICA Convocatoria de Febrero. EXAMEN DE TEORÍA T1 curso 2002 / 2003 TEST. Nombre DNI Grupo INSTRUCCIONES

Arquitectura y Tecnología de Computadores. Bloque Temático I: Arquitecturas Paralelas. Bloque Temático II: Arquitecturas Distribuidas

Introducción a la. Programación con

Nombre de la Asignatura INTRODUCCIÓN A LA PROGRAMACIÓN INFORMACIÓN GENERAL Escuela. Departamento Unidad de Estudios Básicos

PROGRAMA: COMPUTACION I

Cómputo paralelo con openmp y C

ALGORITMOS, ESTRUCTURAS Y PROGRAMACION

cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales. ING1310 Introducción a la Computación.

Paralelización de algoritmos para el procesado de imágenes de teledetección

1 Primitivas básicas de OpenMP

Objetos y memoria dinámica

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Estructura de Datos. Arreglos. Experiencia Educativa de Algorítmica ESTRUCTURA DE DATOS - ARREGLOS 1

Problema del Viajante de Comercio con GPU

Modularización en lenguaje C. Funciones

1 ( 3,5 puntos) Responda, justificando sus respuestas, a las siguientes cuestiones:

Objetos de aprendizaje: Computadora

Cilk. Un entorno de programación paralela. Tomás Muñoz Rodríguez < > 17 de noviembre de 2011

PARADIGMA y LENGUAJES DE PROGRAMACIÓN

Acelerando el producto de matrices dispersas con GPUs en entorno MATLAB: MAT-ELLRT

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA ELÉCTRICA DEPARTAMENTO DE ELECTRÓNICA

Lenguajes de Programación I

Hilos Secciones Stallings:

Unidad 4. Arreglos y Cadenas

Qué son los arreglos

Unidad 1: Conceptos generales de Sistemas Operativos.

Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos

Transcripción:

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de Ingeniería Introducción a Cómputo Paralelo con CUDA C/C++ Laboratorio de Intel y Cómputo de alto desempeño Elaboran: Revisión: Ing. Laura Sandoval Montaño

Temario 1. Antecedentes 2. El GPU 3. Modelo de programación CUDA 4. Manejo de matrices 5. Memoria compartida

Jerarquía de la memoria Una malla (o grid) está conformada por bloques. Los bloques a su vez están conformados por hilos.

Jerarquía de la memoria Cada hilo tiene memoria local privada. Cada bloque tiene memoria compartida visible a todos los hilos del mismo. Todos los hilos tienen acceso a la misma memoria global.

El dispositivo puede: L/E registros por hilo. L/E memoria local por hilo. L/E memoria compartida por bloque. L/E memoria global por grid. Leer memoria constante por grid. El host (CPU) puede: Transferir datos a la memoria global y constante y viceversa.

1. Copiar Datos a procesar. 2. El CPU indica al GPU qué hay que hacer. 3. El código se ejecuta en paralelo. 4. Copiar resultado de GPU a CPU.

cudamalloc() Función necesaria para asignar memoria en el dispositivo. cudafree() Es necesario liberar la memoria que ya no se utiliza.

cudamemcpy() Función que copia datos entre las memorias: La transferencia es asíncrona (el programa continúa antes de que la copia sea finalizada)

Función Kernel CUDA C/C++ es una extensión del lenguaje C que permite al programador definir funciones Kernel. Características Es ejecutada por N hilos. Cada hilo lo realiza de forma secuencial. Se debe especificar la declaración global El número de hilos se define utilizando <<< >>> No tiene valor de retorno (void)

Ejercicio Hacer un programa que realice la suma de dos enteros.

Configuración de la ejecución: La ejecución opera en paralelo a través de hilos. Cada hilo tiene su identificador y registros. La cantidad de hilos en ejecución depende del hardware. Un grid está compuesto por bloques, y éstos por hilos.

Índices: Hilos: Todos los hilos tienen índices con el fin de calcular las direcciones de memoria y tomas decisiones de control. Los hilos tienen variables para identificarse, ya sea en 1, 2 ó 3 dimensiones (lo que proporciona la facilidad para el manejo de vectores, matrices o volúmenes). Bloques: Tal como los hilos, los bloques (dentro del grid) también tienen variables en 1, 2 ó 3 dimensiones. El kernel es copiado en todos los bloques invocados. El número total de hilos es la cantidad de hilos de cada bloque por la cantidad de bloques.

Variables (creadas automáticamente): Índice del hilo en x threadidx.x Índice del hilo en y threadidx.y Índice del hilo en z threadidx.z Índice del bloque en x blockidx.x Índice del bloque en y blockidx.y Índice del bloque en z blockidx.z Número de hilos por bloque en x blockdim.x Número de bloques por grid en x griddim.x

Ejercicio: Arreglos unidimensionales Sumar dos vectores de tamaño 100 en el GPU usando 1 bloque y 100 hilos.

Ejercicio: Arreglos unidimensionales Sumar dos vectores de tamaño 100 en el GPU usando 10 bloques y 10 hilos por bloque.

Solución: Arreglos unidimensionales tid = threadidx.x + blockdim.x * blockidx.x; Cuyo mapeo es:

Ejercicio: Arreglos unidimensionales Sumar dos vectores de tamaño 100 en el GPU usando 2 bloques y 10 hilos por bloque. 20 hilos para 100 elementos?