Francisco J. Hernández López

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

Francisco Javier Hernández López

Primeros pasos con CUDA. Clase 1

CUDA Overview and Programming model

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

Introducción a GPGPU y CUDA Doctorado en Tecnologías de la Información y las Telecomunicaciones

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

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS

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

Arquitecturas GPU v. 2013

Segunda Parte: TECNOLOGÍA CUDA

Modelo de aplicaciones CUDA

Computación en procesadores gráficos

GENERACIÓN DE IMÁGENES VOLUMÉTRICAS DE DATOS BIOMÉDICOS EN TIEMPO REAL

DESARROLLO DE APLICACIONES EN CUDA

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

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS

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

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

Computación Heterogénea con OpenCL. Flores, Facundo UNSA Fac. Cs. Exactas

48 ContactoS 84, (2012)

SUMA de Vectores: Hands-on

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

Librería Thrust. Clase 4.

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

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

Bloque IV. Prácticas de programación en CUDA. David Miraut Marcos García Ricardo Suárez

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

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

Programación de GPUs con CUDA

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

Utilización de la programación paralela en procesadores gráficos para el cálculo científico.

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

Qué es un programa informático?

Memorias, opciones del compilador y otras yerbas. Clase 3

Universidad Complutense de Madrid FACULTAD DE INFORMÁTICA

ARQUITECTURA DE VON NEUMANN Y HARVARD

Programando con memoria unificada. Contenidos [15 diapositivas] Aportaciones de la memoria unificada. I. Descripción

Lenguaje binario. Código ASCII. Medidas de la información

Introducción. Por último se presentarán las conclusiones y recomendaciones pertinentes.

OPTIMIZACIÓN DE ALGORITMOS PARA PROCESADO DE IMÁGENES CON GPUs

Extracción paralela de valores propios en matrices Toeplitz simétricas usando hardware gráfico

Introducción rápida a la programación (estructurada ) con C++

Seminario II: Introducción a la Computación GPU

NVIDIA CUDA RESEARCH CENTER

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 los sistemas operativos. Ing Esp Pedro Alberto Arias Quintero

0-31 : caracteres de control : carac. Comunes : especiales (flechas, símbolos) y particulares (ñ)

Introducción a los Sistemas Operativos

Tema: Microprocesadores

Cálculo Estructural, Fluídos e Magnetismo Ansys 5.7

Ejemplos de optimización para Kepler. 1. Balanceo dinámico de la carga. Contenidos de la charla [18 diapositivas]

Procesamiento Paralelo

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

Programación de videojuegos para consolas portátiles

Informática Electrónica Manejadores de Dispositivos (Device Drivers)

Evolución del software y su situación actual

MOMENTO I. BLOQUE 1. Opera las funciones básicas del sistema operativo y garantiza la seguridad de la información

Objetos de aprendizaje: Computadora

Organización del Computador I. Introducción e Historia

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

Fundamentos de Programación. Sabino Miranda-Jiménez

Múltiples GPU (y otras chauchas)

Taller: Introducción a GPU's y Programación CUDA para HPC

Unidad I: Organización del Computador. Ing. Marglorie Colina

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Descubriendo Kepler. 1. Presentación de la arquitectura. Agradecimientos. Indice de contenidos [46 diapositivas]

RECONOCIMIENTO DE SUS COMPONENTES - LA PC POR DENTRO:

Fundamentos de los Sistemas Operativos. Tema 1. Conceptos generales Estructura del sistema operativo ULPGC - José Miguel Santos Espino

Computación Gráfica = CG = Computer Graphics

Programación con Multitareas

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA CIVIL DEPARTAMENTO DE INGENIERÍA ESTRUCTURAL

CAR.

CAR. Responsable : María del Carmen Heras Sánchez. Asesores Técnicos : Daniel Mendoza Camacho Yessica Vidal Quintanar.

Qué ofrece la programación en AutoCAD? Qué necesito para empezar a programar? Qué es C# y.net? Autor: Jorge A. Díez Pomares Laboratorio de C.A.D.

TEMA 2: Organización de computadores

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

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

Introducción a los Sistemas Operativos

Leapfrog Geo 3.1. Notas técnicas de la versión

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

Técnicas SuperEscalares en la Paralelización de Bibliotecas de Computación Matricial sobre Procesadores Multinúcleo y GPUs

Solving Dense Linear Systems on Platforms with Multiple Hardware Accelerators

Programación Concurrente y Paralela. Unidad 1 Introducción

Procesadores de lenguaje Tema 6 La tabla de símbolos

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador.

Estructuras de Datos Declaraciones Tipos de Datos

Tarjetas gráficas para acelerar el cómputo complejo

Sist s em e a m s s O per e ativos o. s Unidad V Entrada Sali l d i a.

Computación Conociendo la herramienta de cálculo

Nombre del estudiante: Giovanna Kristhel Mendoza Castillo Gustavo Antonio González Morales Eduardo Solis Lara Francisco Javier Merodio Molina

Arquitecturas de Altas Prestaciones y Supercomputación

ESTRUCTURA BÁSICA DE UN ORDENADOR

HPC y GPUs. GPGPU y software libre. Emilio J. Padrón González DE UNIVERSIDADE DA CORUNA GAC.UDC.ES

ESCUELA DE INGENIERIA Informática Y Sistemas

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

Clase No. 2 Programación Básica Licenciatura en Telecomunicaciones

EVOLUCIÓN HISTÓRICA DE LOS µp

HARDWARE: DISPOSITIVOS DE ENTRADA, PROCESAMIENTO Y SALIDA/ SOFTWARE: SOFTWARE DE SISTEMAS DE APLICACIONES. Ralph Stair y George Reynolds

Organización de una computadora. EIF200 Fundamentos de Informática Prof. Marlene DL I ciclo 2012

Transcripción:

Francisco J. Hernández López fcoj23@cimat.mx

2

Procesadores flexibles de procesamiento general Se pueden resolver problemas de diversas áreas: Finanzas, Gráficos, Procesamiento de Imágenes y Video, Algebra Lineal, Física, Química, Biología, etc. Ecs. Diferenciales Segmentación de Imágenes Medicas Dinámica Molecular Detección de Objetos Visitar CUDA ZONE 3

GeForce GTX 780 Ti CUDA_C_Programming_Guide.pdf 4

Las GPUs cuentan con mayor número de transistores para procesar los datos 5

Es una tecnología de propósito general que nos permite ejecutar código en GPUs para hacer Cómputo Paralelo Desarrollado por NVIDIA en el 2006 Arquitectura Capacidad 8-200 series 1.0-1.3 FERMI (400 series) 2.0-2.1 KEPLER (600 series) 3.0-3.5 Nuevas Arq. (2014-2016) Arquitecturas de las GPUs y sus capacidades Capacidad MaxWell 5.0-5.2 Volta-Pascal -- 6

7

Soporta los lenguajes de programación C/C++, Fortran, Matlab, Python, LabView, etc. Soporte de datos en paralelo y manejador de hilos. Librerías: FFT (Fast Fourier Transform) BLAS (Basic Linear Algebra Subroutines) CURAND (Generar números aleatorios) CUSPARSE (Subrutinas de algebra lineal para operar matrices ralas) NPP (NVIDIA Performance Primitives) Opera internamente con OpenGL y DirectX. Soporta los sistemas operativos: Windows XP 32/64-bit, Windows Vista 32/64-bit, Windows 7 32/64-bit, Linux 32/64-bit y Mac OS. 8

El software CUDA esta compuesto por: Hardware driver Runtime Libraries 9

Un programa que se compila para ejecutarse en una tarjeta gráfica se le llama Kernel. El conjunto de hilos que ejecuta un Kernel están organizados como una cuadricula (grid) de bloques de hilos. Un Bloque de hilos es un conjunto de hilos que pueden cooperar juntos: Con rápido acceso a memoria compartida. De forma sincronizada. Con un identificador de hilos ID. Los Bloques pueden ser arreglos de 1, 2 o 3 dimensiones. Un Grid de bloques de hilos: Tiene un número limitado de hilos en un bloque. Los bloques se identifican mediante un ID. Pueden ser arreglos de 1 o 2 dimensiones. 10

Ejecución en el Host y Device. Host = CPU Device = GPU Kernel = Conjunto de instrucciones que se ejecutan en el device. 11

Host Device GPU CPU DRAM Chipset DRAM Local Global Constant Texture Multiprocessor Multiprocessor Registers Shared Registers memory Multiprocessor Shared Registers memory Shared memory Constant and Texture caches 12

Introducción a la Programación en CUDA 13 Crear memoria cudamalloc ((void**) devptr, size_t size) cudamallochost ((void**) hostptr, size_t size) cudafree (void *devptr) cudafreehost (void *hostptr) 13

Introducción a la Programación en CUDA 14 Copiar memoria cudamemcpy(void *dst, const void *src, size_t count, enum cudamemcpykind kind) cudamemcpy2d(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudamemcpykind kind) cudamemcpytosymbol(const char *symbol, const void *src,size_t count,size_t offset,enum cudamemcpykind kind) H D D D cudamemcpyfromsymbol(void *dst, const char *symbol, size_t count, size_t offset, enum cudamemcpykind kind) D H D D Kind = cudamemcpyhosttohost, cudamemcpyhosttodevice, cudamemcpydevicetohost, or cudamemcpydevicetodevice. 14

Introducción a la Programación en CUDA 15 device Se ejecuta en el dispositivo Llamada solamente desde el dispositivo global Se ejecuta en el dispositivo Llamada solamente desde el host host Se ejecuta en el host Llamada solamente desde el host 15

Introducción a la Programación en CUDA 16 device Reside en el espacio de la memoria global Tiene el tiempo de vida de una aplicación Es accesible a partir de todos los hilos dentro del grid, y a partir del host a través de la biblioteca en tiempo de ejecución constant (Opcionalmente se utiliza junto con device ) Reside en el espacio de la memoria constante Tiene el tiempo de vida de una aplicación Es accesible a partir de todos los hilos dentro del grid, y a partir del host a través de la biblioteca en tiempo de ejecución shared (Opcionalmente se utiliza junto con device ) Reside en el espacio de memoria compartida de un bloque de hilos Tiene el tiempo de vida de un bloque Solamente accesible a partir de los hilos que están dentro del bloque 16

Introducción a la Programación en CUDA 17 Una función, por ejemplo: global void NameFunc(float *parametro); debe ser llamada como sigue: NameFunc <<< Dg, Db, Ns, St >>> (parametro); Dg: Es de tipo dim3 dimensión y tamaño del grid Db: Es de tipo dim3 dimensión y tamaño de cada bloque Ns: Es de tipo size_t número de bytes en memoria compartida St: Es de tipo cudastream_t el cuál indica que stream va a utilizar la función kernel (Ns y St son argumentos opcionales) 17

Introducción a la Programación en CUDA 18 Todas las funciones global y device tienen acceso a las siguientes variables: griddim es de tipo dim3, indica la dimensión del grid blockidx es de tipo uint3, indica el índice del bloque dentro del grid blockdim es de tipo dim3, indica la dimensión del bloque threadidx es de tipo uint3, indica el índice del hilo dentro del bloque 18

Introducción a la Programación en CUDA 19 char1, uchar1, char2, uchar2, char3, char3, char4, uchar4, short1, ushort1, short2, ushort2, short3, ushort3, short4, ushort4, int1, uint1, int2, uint2, int3, uint3, int4, int4, long1, ulong1, long2, ulong2, long3, ulong3, long4, ulong4, longlong1, longlong2, float1, float2, float3, float4, double1,double2 La 1ra, 2da, 3ra, and 4ta componentes se acceden a través de los campos x, y, z y w respectivamente float3 temp[10];.. temp[i].x=0.0; temp[i].y=0.0; temp[i].z=0.0; 19

Introducción a la Programación en CUDA 20 NombreFuncion() A nivel de hardware Mayor velocidad pero menor precisión Ejemplos: sinf(x), expf(x), logf(x), NombreFuncion() Menor velocidad pero mayor precisión Ejemplos: sinf(x), expf(x), logf(x), -use_fast_math: Opción del compilador nvcc 20

Introducción a la Programación en CUDA 21 El nvcc, es el encargado de compilar el código CUDA Soporta C/C++ El nvcc utiliza los siguientes compiladores para el código host: Linux: gcc, g++ Windows: Microsoft VS C/C++ Mac: Xcode Ver [CUDA Compile Driver NVCC] 21

Arquitecturas Capability 8-200 series 1.0-1.3 FERMI (400 series) 2.0-2.1 KEPLER (600 series) 3.0-3.5 Nuevas Arquit. (2014-2016) Capability MaxWell 5.0-5.2 Volta-Pascal -- Arquitecturas y Capacidades de las GPUs 22

Introducción a la Programación en CUDA 23 GeForce 8400 GS, C=1.1 TESLA C1060, C=1.3 Quadro FX 1700, C=1.1 GeForce GT 640, C=3.0 GeForce 8800 GT, C=1.1 GeForce GTX 480, C=2.0 GTX > GTS > GT > GS 23

http://developer.nvidia.com/cuda/cuda-downloads 24

25

26 devicequerydrv Para saber que capacidades tiene nuestra tarjeta de video: Resultado con una tarjeta NVIDIA GeForce 8400 GS 26

Introducción a la Programación en CUDA 27 devicequerydrv Para saber que capacidades tiene nuestra tarjeta de video: Resultado con una tarjeta NVIDIA GeForce 8800 GT 27

CUDA-Z GeForce 8400 GS & GeForce 8800 GT [http://cuda-z.sourceforge.net/] 28

CUDA-Z Introducción a la Programación en CUDA 29 GeForce 8400 GS & GeForce 8800 GT 29

CUDA-Z Introducción a la Programación en CUDA 30 GeForce 8400 GS & GeForce 8800 GT 30

CUDA-Z Quadro FX 5600 & Tesla C1060 31

CUDA-Z Introducción a la Programación en CUDA 32 Quadro FX 5600 & Tesla C1060 32

CUDA-Z Introducción a la Programación en CUDA 33 Quadro FX 5600 & Tesla C1060 33

CUDA-Z Introducción a la Programación en CUDA 34 GeForce GTX 480 & GeForce GT 640 34

CUDA-Z Introducción a la Programación en CUDA 35 GeForce GTX 480 & GeForce GT 640 35

CUDA-Z Introducción a la Programación en CUDA 36 GeForce GTX 480 & GeForce GT 640 36