Alejandro Molina Zarca

Documentos relacionados
CUDA: MODELO DE PROGRAMACIÓN

CUDA (Compute Unified Device Architecture)

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

Primeros pasos con CUDA. Clase 1

Francisco J. Hernández López

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

GPGPU ( GENERAL PURPOSE COMPUTING ON GRAPHICS PROCESSING UNITS)

Francisco Javier Hernández López

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

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

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

Segunda Parte: TECNOLOGÍA CUDA

Francisco J. Hernández López

Tema 3 GPUs: Introducción

Arquitecturas GPU v. 2015

Modelo de aplicaciones CUDA

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

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

Aplicaciones Concurrentes

Introducción a la programación de códigos paralelos con CUDA y su ejecución en un GPU multi-hilos

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS

CDI Arquitecturas que soportan la concurrencia. granularidad

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

Inside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

CARACTERIZACION DE PROBLEMAS A SOLUCIONAR MEDIANTE PROGRAMACIÓN MULTIPROCESO DE MEMORIA COMPARTIDA. Autor ERIKA VIVIANA RIAÑO BEJAR

Universidad Rey Juan Carlos. Reconstrucción de PET mediante CUDA: una aproximación paralela

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

Uso eficiente de tarjetas gráficas para la visualización volumétrica de campos escalares

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

Computación en procesadores gráficos

Herramientas para el estudio de prestaciones en clusters de computación científica, aplicación en el Laboratorio de Computación Paralela

Paralelismo _Arquitectura de Computadoras IS603

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

DESARROLLO DE APLICACIONES EN CUDA

Guía y fundamentos de la programación en paralelo

MAGMA. Matrix Algebra on GPU and Multicore Architecture. Ginés David Guerrero Hernández

Trabajo de Fin de Master

Hilos. Módulo 4. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco. Hilos

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

Caracterización de las aplicaciones paralelas en cuanto a la petición de recursos

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

Sistemas Operativos. Procesos

Aspectos avanzados de arquitectura de computadoras Multithreading. Facultad de Ingeniería - Universidad de la República Curso 2017

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 0 Lanzamiento del Curso. Motivación

Prof. María Alejandra Quintero. Informática Año

Programación Concurrente Recopilación de teoría referente a la materia

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

Necesidad de Protección

Introducción a la Programación Paralela

UNIDAD II. Software del Computador. Ing. Yesika Medina Ing. Yesika Medina

Tile64 Many-Core. vs. Intel Xeon Multi-Core

15 de Octubre Crowne Plaza Ciudad de México. Simposio Técnico de Medición y Automatización. ni.com/mexico

Flaviu Vasile Buturca TRABAJO FINAL DE CARRERA. Dirigido por Carles Aliagas Castell. Grado de Ingeniería Informática

FLAG/C. Una API para computación matricial sobre GPUs. M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí

III-LIDI Facultad de Informática UNLP La Plata, Argentina 2. CONICET, Argentina

Hilos. Módulo 4. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

Departamento de Arquitectura de computadores y electrónica Universidad de Almería. Tesis Doctoral

IMPLEMENTACIÓN Y EVALUACIÓN DE UN ALGORITMO ABC EN GPU

ARQUITECTURA DEL COMPUTADOR

IMPLEMENTACIÓN DE MOVING LEAST SQUARES USANDO LA GPU

MULTIPROGRAMACIÓN. Introducción a al Multitarea

48 ContactoS 84, (2012)

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

Kepler. 1. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

TEMA 4 PROCESAMIENTO PARALELO

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS

Principios de Computadoras II

Requisitos Técnicos de actualización de Cluster Heterogéneo

Tema 7. Mejora del rendimiento: introducción a la segmentación y a las arquitecturas paralelas

Arquitecturas de Altas Prestaciones y Supercomputación

HPC: Aplicaciones y Software

Introducción a los Sistemas Operativos

Introducción al Computo Distribuido

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

Introducción a la Computación Paralela

Arquitecturas Híbridas o Heterogéneas

Procesos y Threads Procesos y Threads. Rendimiento Rendimiento (paralelismo) (paralelismo) Productividad Productividad

Variables, expresiones y sentencias

UNIVERSIDAD DE GUADALAJARA

TEMA 2: PROGRAMACIÓN PARALELA (I)

6.1 Base De Datos Centralizada

RECONOCIMIENTO DE OBJETOS PARA APOYO A PERSONAS INVIDENTES BASADO EN DEEP LEARNING

Concurrencia de Procesos

CUDA 5.5 y Visual Studio Express 2012 para Escritorio. Primeros pasos.

PLANIFICACIÓN DE LA DOCENCIA UNIVERSITARIA GUÍA DOCENTE. Programación Concurrente

Java para no Programadores

COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO

PROGRAMA DE ESTUDIO Área de Formación : Fecha de elaboración: 28 de mayo de 2010 Fecha de última actualización:

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

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

Contenidos: Definiciones:

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 1 Introducción

Cómputo Paralelo en Redes Locales de Computadoras

Plan 95 Adecuado DEPARTAMENTO: ELECTRÓNICA CLASE: ELECTIVA DE ESPECIALIDAD ÁREA: TÉCNICAS DIGITALES HORAS SEM.: 4 HS. HORAS / AÑO: 64 HS.

Java para no Programadores

CAPITULO 12: SISTEMAS DE FICHEROS DISTRIBUIDOS Un sistema bien diseñado permite el acceso a un servidor de ficheros (remoto) con eficiencia y

Universisdad de Los Andes Facultad de Ingeniería Escuela de Sistemas

Transcripción:

Compute Unified Device Architecture (CUDA) Que es CUDA? Por qué CUDA? Dónde se usa CUDA? El Modelo CUDA Escalabilidad Modelo de programación Programación Heterogenea Memoria Compartida Alejandro Molina Zarca alejandro.molina2@um.es

Qué es CUDA? CUDA es una arquitectura de cálculo paralelo que hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por NVIDIA. Permite a los programadores usar una variación de C/C++ para codificar algoritmos en una GPU de NVIDIA. Mediante wrappers se puede utilizar Python, Fortran, Java, OpenGL y Direct3D.

Por qué CUDA? Hoy en día, el mercado demanda aplicaciones en tiempo real, alta definición y 3D que obtienen un alto rendimiento únicamente mediante el paralelismo. CUDA intenta explotar las ventajas de las GPU frente a las CPU de propósito general utilizando el paralelismo que ofrecen sus múltiples nucleos. En aplicaciones que utilicen numerosos hilos que relicen tareas independientes (que es lo que hacen las GPU al procesar gráficos de manera natural), una GPU podrá ofrecer un gran rendimiento.

Por qué CUDA?

Por qué CUDA?

Donde se usa CUDA? En prácticamente todas las aplicaciones de video actuales. AMBER, simulador de dinámica molecular. Numerix y CompatibL en el mercado financiero. En la actualidad existen más de 700 clusters de GPUs instalados en compañias Fortune 500 de todo el mundo, lo que incluye empresas como Schlumberger y Chevron en el sector energético o BNP Pariba en el sector bancario.

El Modelo CUDA CUDA intenta aprovechar el gran paralelismo, y el alto ancho de banda de la memoria en las GPU en aplicaciones con un gran coste aritmético frente a realizar numerosos accesos a memoria principal.

Escalabilidad El objetivo es que se desarrolle software con paralelismo escalable que aproveche el número de nucleos disponibles de forma transparente. Un programa multitarea se particiona automáticamente en bloques de hilos independientes, acorde al número de nucleos disponibles.

Escalabilidad Los mismos bloques, se dividen de forma óptima según el número de nucleos del sistema.

Modelo de programación CUDA extiende C, permitiendo al programador definir funciones denominadas kernel que son ejecutadas por N hilos diferentes en paralelo. Un kernel es ejecutado por uno o más bloques de hilos. Hay un límite de hilos por bloque que depende de los recursos del sistema. Actualmente es de 1024. Un hilo tiene un identificador único, accesible dentro del kernel mediante la variable threadidx.

Modelo de programación: - Kernel Mediante la sentencia global definimos el kernel Identificador de hilo Un bloque de N hilos Llamada al Kernel

Modelo de programacion Para mayor comodidad del programador, la variable threadidx es un vector de tres componentes gracias a la cual los hilos pueden ser identificados por su indice en una, dos y tres dimensiones. Los bloques de hilos también poseen una variable blockidx con el mismo propósito. La dimensión de un bloque es accesible mediante la variable blockdim.

Modelo de programación Las compoenentes x e y indican la posicion dentro del bloque en caso del thread, o del grid en caso del bloque.

Modelo de programación La cantidad de hilos por bloque y la cantidad de bloques pueden establecerse utilizando: Int dim3 Los hilos de un mismo bloque pueden coordinarse mediante la sentencia syncthreads().

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

Jerarquía de memoria

Programación Heterogenea El modelo de programación de CUDA asume que los bloques que ejecutan los kernel se ejecutarán en la GPU mientras que el resto se ejecutará en la CPU. Tanto la GPU como la CPU mantienen su propio espacio de memoria DRAM, con lo que en tiempo de ejecución se deben gestionar las transferencias entre los dos espacios de memoria.

Programación Heterogenea

Memoria Compartida CUDA recomienda en la medida de lo posible, trabajar con memoria compartida, evitando así la sobrecarga sobre los accesos a memoria global. En el ejemplo de la multiplicación de matrices, sin memoria compartida, cada hilo leería una fila y columna de las matrices y calcularía el elemento de la matriz resultante. Partiendo la matriz en bloques, podemos mantener ocupado un bloque de hilos utilizando la memoria compartida.

Memoria Compartida

Memoria Compartida La sentencia device permite construir una submatriz, asi como obtener y establecer elementos a partir de una matriz.