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

Tamaño: px
Comenzar la demostración a partir de la página:

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

Transcripción

1 Introducción a GPGPU y CUDA Doctorado en Tecnologías de la Información y las Telecomunicaciones ETSI Telecomunicación Universidad de Valladolid Mario Martínez-Zarzuela Febrero de 2015 Introducción CONTENIDO Diferencias entre CPU y GPU Desarrollo de aplicaciones para GPU Ejemplo: suma de vectores Ejercicios: suma de vectores, suma de matrices Conclusiones 1

2 INTRODUCCIÓN CPU vs GPU by Mythbusters Cazadores de mitos en el NVISION08 Adam & Jaime contratados por NVIDIA 2

3 GPGPU & CUDA GPU - Graphics Processing Unit Unidad de Procesamiento Gráfico Procesador gráfico Coprocesador de la CPU tareas gráficas GPGPU - General-Purpose computing on GPU GPU de Propósito General 2004 Inicios de GPGPU Primeros desarrolladores Compleja programación gráfica API OpenGL Shaders Cg Brook (Universidad de Standford), Lib Sh GPGPU & CUDA Pipeline gráfica programable Vértices X,Y,Z,W Rasterizador Interpolación Fragmentos R,G,B,A Pre-cuda Shaders Operaciones vectores de 4 componentes 3

4 GPGPU & CUDA 2007 NVIDIA CUDA Toolkit Supercomputación para las masas CUDA - Compute Unified Device Architecture Plataforma de cálculo en paralelo y modelo de programación Inicialmente extensiones de lenguaje C Compilador nvcc Librería en tiempo de ejecución La primera GPU habilitada por NVIDIA fue la GeForce G80 (2006) Cada vez más herramientas y lenguajes Entornos de desarrollo integrados Visual Studio Nsight y Eclipse Nsight Edition Herramientas de depurado y profiling Librerías y plugins 3 rd party GPGPU y hardware Tegra GeForce/Quadro Tesla Tegra (GPU + ARM) (GPU + ARM) 4

5 DIFERENCIAS ENTRE CPU Y GPU Rendimiento computacional y ancho de banda GPU vs. СPU 5

6 Características CPU Intel Core i7 Varios núcleos independientes de alto rendimiento 2,4,6,8 núcleos 2,66 3,6GHz cada uno Hyper-Threading : cada núcleo es visto por el SO como dos núcleos lógicos, que pueden ejecutar dos hilos de forma simultánea. 3 niveles de caché, gran caché L3 Cada núcleo: L1=32KB (datos) + 32KB (instrucciones), L2=256KB L3 compartida, hasta 15 MB Peticiones a memoria gestionadas de forma independiente por cada hilo/proceso Core I7-3960x, 6 núcleos, 15MB L3 Características GPU GeForce 780 Ti (Kepler GK110) 15 Multiprocesadores SMX 2880 núcleos en total < 1 GHz 2 niveles de caché Cada núcleo: L1=64KB (datos) L2 compartida=1492 KB Las peticiones a memoria son realizadas por grupos de hilos Ancho de banda 384- bit GDDR MB 6

7 GK1xx GPU Kepler Streaming Multiprocessor (SMX) Formados por: 192 núcleos ~ 1 GHz cada uno Disposición en grupos de unidades FP 32 unidades de Funciones Especiales 32 unidades de Carga/Almacenamiento dedicadas al acceso a memoria Las peticiones a memoria son realizadas por grupos de hilos registros x 32 bit (256KB) 64KB memoria compartida/ L1 caché Configurable por el usuario 48KB caché de solo lectura 48KB caché 2D para texturas Evolución de arquitecturas 7

8 Características GPU GeForce 980 (Maxwell GK204) 16 Multiprocesadores SMM 2048 núcleos en total Mayor cache L KB frente a: 1492KB (GK110) 512KB (GK104) Reducción interfaz con memoria 256-bit Ancho de banda: 224 GB/sec GM204 GPU Maxwell Multiprocessor (SMM) Septiembre 2014 Novedades: 2da generación chip Maxwell, tras GM107 Menos núcleos por SM 128 núcleos ~ 1 GHz cada uno +40% eficiencia para cada CUDA core Planificador mejorado Nuevo damino de datos Mayor eficiencia energética 2x perf/watt vs GK104 Diseño en cuadrantes de 32 núcleos 1 warp scheduler por cuadrante 2 instrucciones por ciclo reloj Mayor memoria compartida / L1 cache 96 KB frente a 64KB (GK110) / 48KB (GK104) Máximo 48KB por thread block Hasta 32 block threads activos por SM ( frente a 16 en Kepler. 8

9 Maxwell Desmitificando la conspiración de la llegada del hombre a la luna Montaje? Buzz Aldrin en zona de sombra porque el Sol está detrás del módulo lunar Iluminación de estudio en L.A.? Parece que está iluminado por múltiples fuentes de luz! No se ven estrellas y los astronautas no recuerdan haberlas visto Se omitieron debido a la dificultad de crearlas? Maxwell Desmitificando la conspiración de la llegada del hombre a la luna Maxwell: renderizado luz tiempo real por primera vez Unreal Engine Voxelized Global Illumination (VGI) 9

10 X1 NVIDIA drive Enero de 2015 (CES Las Vegas) Potencia superior a la del mayor supercomputador de hace 15 años GPU Maxwell de 256 núcleos 8 núcleos de CPU ARM Procesamiento de 12 cámaras 60 fps NVIDIA DRIVE PX: Autonomous drive Deep Neural Network Computer Vision GPU vs. CPU Cientos de núcleos de cálculo simplificados Bajas frecuencias ~1 GHz (en lugar de 2-12 en CPU) Cachés pequeñas (valores Kepler) 192 núcleos comparten la caché L1 (16-48 KB) L2 compartida entre todos los núcleos, 1.5 MB, no L3 Cambios de contexto rápidos en GPU Sin sobrecarga por cambiar entre hilos (en hardware) Soporte para millones de hilos virtuales 10

11 Latencia en los accesos a Memoria Objetivo: cargar todos los núcleos Problema: latencia en los accesos a memoria Solución: CPU: compleja jerarquía de cachés GPU: miles de hilos listos para ser ejecutados Ocultar la latencia realizando cálculos LENGUAJES Y LIBRERÍAS DESARROLLO DE APLICACIONES 11

12 DRAM I/F Giga Thread HOST I/F DRAM I/F 03/02/2015 Ecosistema de Desarrollo GPGPU Librerías Aplicaciones Directivas OpenACC Lenguajes de Programación (CUDA) Aceleración Drop-in Aceleración rápida de aplicaciones existentes Máximo Rendimiento Directivas OpenACC void saxpy(int n, float a, float *x, float *restrict y){ #pragma acc parallel loop for (int i = 0; i < n; ++i) y[i] = a*x[i] + y[i]; } L2 DRAM I/F DRAM I/F DRAM I/F DRAM I/F... // Perform SAXPY on 1M elements saxpy(1<<20, 2.0, x, y);... 12

13 Librería Thrust #include <thrust/device_vector.h> #include <thrust/transform.h> #include <thrust/functional.h> #include <iostream> int main(void) { thrust::device_vector<float> X(3); thrust::device_vector<float> Y(3); thrust::device_vector<float> Z(3); X[0] = 10; X[1] = 20; X[2] = 30; Y[0] = 15; Y[1] = 35; Y[2] = 10; thrust::transform(x.begin(), X.end(), Y.begin(), Z.begin(),\ thrust::plus<float>()); } for (size_t i = 0; i < Z.size(); i++) std::cout << "Z[" << i << "] =" << Z[i] << "\n"; return 0; Cálculos utilizando la GPU GPU (device) es controlado por la CPU (host) Co-procesador GPU es «pasiva», i.e. no puede llamarse a si misma Excepción Paralelismo dinámico (CUDA 5.X) Cálculos en paralelo en el device Invocados normalmente por el host Desde cualquier parte del programa Oportunidad para una optimización incremental del código Memorias GPU y CPU separadas Excepción Tarjetas integradas Opción de Unified Virtual Address 13

14 Cálculos utilizando la GPU Cálculos utilizando la GPU Un programa que utiliza GPU está formado por: Código para la GPU (código del device), que contiene: Instrucciones de cálculo en paralelo un CUDA Kernel Accesos a la memoria de la GPU Código para la CPU (código del host), maneja: Gestión de memoria GPU reserva/liberación Intercambio de datos entre GPU y CPU Invocar ejecución de CUDA Kernel en GPU Interpretación de resultados y otras etapas de procesamiento en serie 14

15 CUDA: Código del device CUDA usa C++ con algunas extensiones: Atributos para funciones, variables y estructuras Funciones integradas (built-in) Funciones matemáticas propias de la GPU Funciones de sincronización, operaciones colectivas entre hilos Vectores de datos de varias dimensiones Variables integradas threadidx, blockidx, blockdim, griddim Plantillas (templates) para trabajar con texturas Compilado con un compilador especial: nvcc Basado en el compilador de código abierto LLVM Puede ampliar los lenguajes de programación para que soporten dispositivos compatibles con CUDA CUDA: Código del host Existe una sintaxis especial para lanzar los kernels de CUDA desde el código del host En su forma más simple se invocan: kernel_routine<<<griddim, blockdim>>>(args, ); Código de CPU se compila con un compilador normal gcc, icc, llvm Excepto invocación del kernel <<<... >>> Funciones enlazadas mediante librerías dinámicas 15

16 CUDA Kernel Función especial, punto de entrada para el código ejecutado en GPU No devuelve nada (void) Se declara con el calificador global Solo puede accede a la memoria GPU Excepción: memoria host mapeada Sin variables estáticas Declaración de parámetros y mismo uso que para funciones normales global void kernel (int * ptr) { ptr = ptr + 1; ptr[0] = 100;.; //other code for GPU } Host lanza «kernels», device los ejecuta CUDA grid, bloques e hilos Invocación de kernel crea una jerarquía de hilos de procesamiento Bloque: agrupación de hilos. Hilos y bloques representan diferentes niveles de paralelismo Grid: conjunto de bloques de hilos invocados Warp: hilos planificados en grupos de 32 hilos Grid Múltiples bloques del mismo tamaño Habitualmente definido por nuestro dominio de cálculo 16

17 CUDA grid, bloques e hilos Hilos dentro de un bloque, y bloque dentro de un grid, indexados de forma especial Posición de un hilo en un bloque, y un bloque en el grid, indexada en tres dimensiones (x,y,z) Tamaño de grid/bloque especificado por el número de bloques/hilos en cada dimensión Si el grid y el bloque tienen dimension z=1, estamos ante un grid de hilos bidimensional o lineal (si además y=1) CUDA grid, bloques e hilos typedef struct{ } dim3; Tipo predefinido en CUDA con 3 miembros x, y, z. Usada para variables built-in : dim3 threadidx índice del hilo en cada bloque dim3 blockidx índice del bloque en el grid dim3 blockdim tamaño de bloque en cada dimensión dim3 griddim tamaño de grid en cada dimensión Cálculo del índice absoluto de un hilo de ejecución a partir de índices relativos. Para un grid de hilos lineal: unsigned int tidx = threadidx.x + blockdim.x*blockidx.x; 17

18 CUDA Escalabilidad Automática Diferentes GPUs con el mismo chip tienen diferente número de SMs GeForce GTX cores 16xSM GM204 Maxwell X1 256 cores 2xSM GM204 EJEMPLO SUMA DE VECTORES 18

19 Suma de vectores en una dimensión Hilos Vector A ld ld ld ld ld ld ld ld ld ld Vector B ld ld ld ld ld ld ld ld ld ld Vector C st st st st st st st st st st Código en el device global void sum_kernel(int *A, int *B, int *C) { int tidx = threadidx.x + blockidx.x * blockdim.x; //calcular índice int elema = A[tidx]; //leer elemento de A int elemb = B[tidx]; //leer elemento de B C[tidx] = elema + elemb; //calcular y escribir elemento en C } Cada hilo de CUDA: Recibe una copia de los parámetros En este ejemplo recibe punteros a vectores en GPU Determina su posición en el grid con el índice tidx Lee los elementos de dos vectores de entrada usando el índice tidx Calcula la suma y escribe los resultados en un vector de salida con el mismo índice tidx 19

20 Código en el host Especificar el tamaño del grid y de cada bloque 5. Lanzar el kernel 6. Código en el host 4. Especificar el tamaño del grid y de cada bloque Depende el tamaño del problema 5. Lanzar el kernel Supondremos vectores de longitud 1024 elementos Tamaño de bloque: 256 (múltiplo de tamaño de warp) Tamaño de grid = 1024 / 256 = 4 bloques //d_a, d_b y d_c son punteros a vectores en el device dim3 blockdim(256,1,1); //Bloques típicos de 128, 256, 512 dim3 griddim(4,1,1); sum_kernel<<<griddim,blockdim>>>(d_a,d_b,d_c); 20

21 Código en el host Reservar memoria en la GPU 3. Copiar datos de entrada a la GPU 4. Especificar el tamaño del grid y de cada bloque 5. Lanzar el kernel 6. Copiar los datos de salida de vuelta al host Reserva de memoria en el device cudaerror_t cudamalloc (void** devptr, size_t size) Reserva size bytes de memoria lineal en la GPU, y devuelve un puntero a la memoria ubicada en *devptr. Los elementos de memoria no son puestos a cero. Las direcciones de memoria están alineadas a 512 bytes cudaerror_t cudafree (void* devptr) Libera la memoria apuntada por devptr En donde cudaerror_t es una enumeración para control de errores 21

22 Transferencia de datos cudaerror_t cudamemcpy ( void* dst, const void* src, size_t count, cudamemcpykind kind) Copia count bytes de la memoria apuntada por src a la memoria apuntada por dst kind especifica la dirección de la transferencia cudamemcpyhosttohost transferencia de datos entre host cudamemcpyhosttodevice transferencia de datos de host a device cudamemcpydevicetohost transferencia de datos de device a host cudamemcpydevicetodevice transferencia de datos entre devices Una llamada a cudamemcpy() con kind inconsistente con punteros dst y src, puede provocar resultados impredecibles GPU no sabe si los punteros pertenecen a la CPU o la GPU (excepción: UVA) Comprobación de Errores En donde cudaerror_t es una enumeración para control de errores En caso de error el código de error recogido por el sistema no está necesariamente asociado a la última llamada de biblioteca de CUDA Funciones útiles para conocer el último error ocurrido cudaerror_t cudapeekatlasterror() devuelve el último error ocurrido en cualquiera de las llamadas cudaerror_t cudagetlasterror() devuelve el último error ocurrido y resetea el estado de error a cudasuccess const char* cudageterrorstring (cudaerror_t error) devuelve la cadena del mensaje del código de error La lista de posibles errores puede consultarse en la documentación de CUDA 22

23 Control de errores La mayoría de funciones de biblioteca devuelven en caso de error una variable de tipo enumeración enum cudaerror_t cudaerror_t err = cudasuccess; err = /* Llamada a función de CUDA */ if (err!= cudasuccess){ fprintf(stderr, Error (error code %s)!\n", cudageterrorstring(err)); exit(exit_failure); } Control de errores Una macro muy útil para gestión de errores es la siguiente Traduce el código de error devuelto a un mensaje de texto #define CUDA_CALL(x) do{ \ cudaerror_t err = (x); \ if (err!= cudasuccess) { \ printf ("Error \"%s\"\n", \ cudageterrorstring(err)); \ exit(-1); \ }} while (0) 23

24 Código en el host #include <stdio.h> #include <cuda_runtime.h> #define CUDA_CALL(x) do{ \ // }} while (0) int main(void) { int N = 1024; size_t size = N * sizeof(float); // Allocate the host input vectors and initialize float *h_a = (float *)malloc(size); float *h_b = (float *)malloc(size); float *h_c = (float *)malloc(size); //... float *d_a,*d_b = NULL; //Reservar memoria E/S en el dispositivo CUDA_CALL(cudaMalloc((void **)&d_a, size)); CUDA_CALL(cudaMalloc((void **)&d_b, size)); float *d_c = NULL; CUDA_CALL(cudaMalloc((void **)&d_c, size)); Código en el host //Copiar los vectores de entrada h_a y h_b al dispositivo CUDA_CALL(cudaMemcpy(d_A, h_a, size, cudamemcpyhosttodevice)); CUDA_CALL(cudaMemcpy(d_B, h_b, size, cudamemcpyhosttodevice)); //Configurar parámetros y lanzar el kernel int blockdim = 256; int griddim = 4; printf("cuda kernel launch with %d blocks of %d threads\n", griddim, blockdim); vectoradd<<<griddim, blockdim>>>(d_a, d_b, d_c, N); cudaerror_t err = cudagetlasterror(); if (err!= cudasuccess) { fprintf(stderr, "Failed to launch vectoradd kernel (error code %s)!\n", cudageterrorstring(err)); exit(exit_failure); } //Copiar resultado al host CUDA_CALL(cudaMemcpy(h_C, d_c, size, cudamemcpydevicetohost)); 24

25 Código en el host //Comprobar cálculos realizados for (int i = 0; i < N; ++i) { if (fabs(h_a[i] + h_b[i] - h_c[i]) > 1e-5) { fprintf(stderr, "Result verification failed at element %d!\n", i); exit(exit_failure); } } printf("test PASSED\n"); CUDA_CALL(cudaFree(d_A)); // Liberar memoria del dispositivo CUDA_CALL(cudaFree(d_B)); CUDA_CALL(cudaFree(d_C)); free(h_a); // Free host memory free(h_b); free(h_c); // Resetear el dispositivo y salir CUDA_CALL(cudaDeviceReset()); return 0; } Compilación rápida con nvcc CUDA amplía C++ de distintas formas: Llamadas a los kernels <<<. >>> Variables integradas threadidx, blockidx Calificadores global device etc. Estas extensiones sólo pueden ser procesadas por archivos *.cu No por archivos *.cpp Es posible ubicar todo nuestro código en archivos *.cu Recomendado para códigos pequeños Se evita utilizar *.c ó *.cpp Compilación y enlazado utilizando nvcc nvcc test.cu o test Ejecutar desde línea de comandos./test 25

26 EJERCICIO Y si la longitud de los vectores no es múltiplo de el tamaño de bloque? Por ejemplo, bloques de tamaño 512 y vectores de longitud 10E6. Cambia el código del host: - Para asegurarte que lanzas exactamente los bloques que son necesarios Cambia el código del device: - Para asegurarte de que hay hilos en el último bloque que permanecen en estado idle. SUMA DE VECTORES Código en el host Qué ocurre si longitud vectores es N, no necesariamente múltiplo de 256? Parámetros de invocación del kernel genéricos Necesario restringir cálculo al dominio de cómputo Algunos threads deberán estar en estado de reposo (idle) //d_a, d_b y d_c son punteros a vectores en el device dim3 blockdim(256,1,1); //Bloques típicos de 128, 256, 512 dim3 griddim((n-1)/blockdim.x+1,1,1); sum_kernel<<<griddim,blockdim>>>(d_a,d_b,d_c,n); 26

27 Código en el device Qué ocurre si longitud vectores es N, no necesariamente múltiplo de 256? Necesario restringir cálculo al dominio de cómputo Algunos threads deberán estar en estado de reposo (idle) global void sum_kernel(int *A, int *B, int *C, int N) { int tidx = blockidx.x * blockdim.x + threadidx.x; //calcular índice if(tid<n){ int elema = A[tidx]; //leer elemento de A int elemb = B[tidx]; //leer elemento de B C[tidx] = elema + elemb; //calcular y escribir elemento en C } } EJERCICIO Extiende el ejemplo anterior a suma de matrices indexando los threads dentro del bloque y los bloques dentro del grid usando dos dimensiones SUMA MATRICES 27

28 Conclusiones Arquitectura GPU muy distinta de CPU Arquitecturas masivamente paralelas Incremento ámbitos de aplicación de GPUs Aumentar rendimiento aplicaciones paralelas Directivas OpenACC / OpenMP Librerías drop in Programación CUDA Curva más elevada de aprendizaje Asequible con conocimientos previos C/C++, Fortran, Programa en CUDA Código en el device CUDA Kernel Código en el host Invoca el CUDA Kernel Información adicional Página web de NVIDIA a Controladores SDK IDE Nsight Visual Studio Eclipse Tutoriales y documentación 28

29 Libros CUDA by Example by Jason Sanders and Edward Kandrot Programming Massively Parallel Processors: A Hands-on Approach by David Kirk, Wen-mei Hwu (2nd ed.) The CUDA Handbook by Nicholas Wilt CUDA Application Design and Development by Rob Farber CUDA Programming: A Developer's Guide to Parallel Computing with GPUs by Shane Cook Gracias por su atención marmar@tel.uva.es Mario Martínez-Zarzuela Febrero

Primeros pasos con CUDA. Clase 1

Primeros pasos con CUDA. Clase 1 Primeros pasos con CUDA Clase 1 Ejemplo: suma de vectores Comencemos con un ejemplo sencillo: suma de vectores. Sean A, B y C vectores de dimensión N, la suma se define como: C = A + B donde C i = A i

Más detalles

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

INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA. Francisco Javier Hernández López INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA Francisco Javier Hernández López http://www.cimat.mx/~fcoj23 Guanajuato, Gto. Noviembre de 2012 Introducción a la Programación en CUDA 2 Qué es el Cómputo Paralelo

Más detalles

SUMA de Vectores: Hands-on

SUMA de Vectores: Hands-on SUMA de Vectores: Hands-on Clase X http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Algunas preguntas practicas (1) Que pasa si los vectores a sumar son muy grandes? (2) Como saber en que

Más detalles

CUDA Overview and Programming model

CUDA Overview and Programming model Departamento de Ciencias de la computación Universidad de Chile Modelado en 3D y sus Aplicaciones en Realidad Virtual CC68W CUDA Overview and Programming model Student: Juan Silva Professor: Dr. Wolfram

Más detalles

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

GPU-Ejemplo CUDA. Carlos García Sánchez Carlos García Sánchez 1 2 Contenidos Motivación GPU vs. CPU GPU vs. Vectoriales CUDA Sintaxis Ejemplo 2 3 Motivación Computación altas prestaciones: www.top500.org 1º: Titan (300mil AMD-Opteron + 19mil

Más detalles

Arquitecturas GPU v. 2015

Arquitecturas GPU v. 2015 v. 2015 http://en.wikipedia.org/wiki/graphics_processing_unit http://en.wikipedia.org/wiki/stream_processing http://en.wikipedia.org/wiki/general-purpose_computing_on_graphics_processing_ units http://www.nvidia.com/object/what-is-gpu-computing.html

Más detalles

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

CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS Leopoldo N. Gaxiola, Juan J. Tapia Centro de Investigación y Desarrollo de Tecnología Digital Instituto Politécnico Nacional Avenida

Más detalles

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS Grupo de Ing. Electrónica aplicada a Espacios INteligentes y TRAnsporte Área Audio-Visual PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS Torrevieja (Alicante) Del 19 al 22 de Julio Álvaro

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU Computación de Propósito General en Unidades de Procesamiento Gráfico () E. Dufrechou, P. Ezzatti, M. Pedemontey J.P. Silva Clases 4 Programación Contenido Modelo de programación Introducción Programación

Más detalles

Arquitecturas GPU v. 2013

Arquitecturas GPU v. 2013 v. 2013 Stream Processing Similar al concepto de SIMD. Data stream procesado por kernel functions (pipelined) (no control) (local memory, no cache OJO). Data-centric model: adecuado para DSP o GPU (image,

Más detalles

GPGPU Avanzado. Sistemas Complejos en Máquinas Paralelas. Esteban E. Mocskos (emocskos@dc.uba.ar) 5/6/2012

GPGPU Avanzado. Sistemas Complejos en Máquinas Paralelas. Esteban E. Mocskos (emocskos@dc.uba.ar) 5/6/2012 Sistemas Complejos en Máquinas Paralelas GPGPU Avanzado Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 5/6/2012 E. Mocskos (UBA CONICET) GPGPU Avanzado 5/6/2012

Más detalles

Computación en procesadores gráficos

Computación en procesadores gráficos Programación con CUDA Ejercicio 8 José Antonio Martínez García Francisco M. Vázquez López Manuel Ujaldón Martínez Portada Ester Martín Garzón Universidad de Almería Arquitectura de las GPUs Contenidos

Más detalles

Modelo de aplicaciones CUDA

Modelo de aplicaciones CUDA Modelo de aplicaciones CUDA Utilización de GPGPUs: las placas gráficas se utilizan en el contexto de una CPU: host (CPU) + uno o varios device o GPUs Procesadores masivamente paralelos equipados con muchas

Más detalles

48 ContactoS 84, (2012)

48 ContactoS 84, (2012) 48 ContactoS 84, 47 55 (2012) Recibido: 31 de enero de 2012. Aceptado: 03 de mayo de 2012. Resumen En los últimos años la tecnología de las unidades de procesamiento de gráficos (GPU-Graphics Processsing

Más detalles

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

UNIVERSIDAD DE BURGOS Área de Tecnología Electrónica INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA UNIVERSIDAD DE BURGOS Área de Tecnología Electrónica INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA César Represa Pérez José María Cámara Nebreda Pedro Luis Sánchez Ortega Introducción a la programación en CUDA

Más detalles

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

Inside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( ) Índice de contenidos [25 diapositivas] Inside Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga 1. Presentación de la arquitectura [3 diapositivas] 2. Los cores

Más detalles

Librería Thrust. Clase 4. http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases

Librería Thrust. Clase 4. http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Librería Thrust Clase 4 http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Hasta aquí... CUDA C/C++ Control de bajo nivel del mapeo al hardware Desarrollo de algoritmos de alta performance.

Más detalles

DESARROLLO DE APLICACIONES EN CUDA

DESARROLLO DE APLICACIONES EN CUDA DESARROLLO DE APLICACIONES EN CUDA Curso 2014 / 15 Procesadores Gráficos y Aplicaciones en Tiempo Real Alberto Sánchez GMRV 2005-2015 1/30 Contenidos Introducción Debugging Profiling Streams Diseño de

Más detalles

Introducción a OpenGL Shading Language (GLSL)

Introducción a OpenGL Shading Language (GLSL) a OpenGL Shading Language (GLSL) November 20, 2007 a OpenGL Shading Language (GLSL) Fixed Pipeline Programmable Pipeline Características de GLSL Por qué escribir un Shader? Vertex Processor Fragment Processor

Más detalles

Computación en procesadores gráficos

Computación en procesadores gráficos Programación con CUDA José Antonio Martínez García Francisco M. Vázquez López Manuel Ujaldón Martínez Portada Ester Martín Garzón Universidad de Almería Arquitectura de las GPUs Contenidos Modelo de programación

Más detalles

Segunda Parte: TECNOLOGÍA CUDA

Segunda Parte: TECNOLOGÍA CUDA Segunda Parte: (compute unified device architecture) 12 I. CUDA CUDA es una arquitectura de cálculo paralelo de NVIDIA que aprovecha la potencia de la GPU (unidad de procesamiento gráfico) para proporcionar

Más detalles

Francisco Javier Hernández López

Francisco Javier Hernández López Francisco Javier Hernández López fcoj23@cimat.mx http://www.cimat.mx/~fcoj23 Ejecución de más de un cómputo (cálculo) al mismo tiempo o en paralelo, utilizando más de un procesador. Arquitecturas que hay

Más detalles

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

Seminario II: Introducción a la Computación GPU Seminario II: Introducción a la Computación GPU CONTENIDO Introducción Evolución CPUs-Evolución GPUs Evolución sistemas HPC Tecnologías GPGPU Problemática: Programación paralela en clústers heterogéneos

Más detalles

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

Paralelización de algoritmos para el procesado de imágenes de teledetección UNIVERSIDAD DE ALCALÁ Escuela Politécnica Superior INGENIERÍA DE TELECOMUNICACIÓN Trabajo Fin de Carrera Paralelización de algoritmos para el procesado de imágenes de teledetección Alberto Monescillo Álvarez

Más detalles

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS Sergio Orts Escolano sorts@dtic.ua.es Vicente Morell Giménez vmorell@dccia.ua.es Universidad de Alicante Departamento de tecnología informática y computación

Más detalles

NVIDIA CUDA RESEARCH CENTER

NVIDIA CUDA RESEARCH CENTER NVIDIA CRC Universidad Sevilla 1 NVIDIA CUDA RESEARCH CENTER APLICACIONES Y OPORTUNIDADES Miguel Ángel Martínez del Amor Research Group on Natural Computing (RGNC) Universidad de Sevilla NVIDIA CRC Universidad

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU Computación de Propósito General en Unidades de Procesamiento Gráfico () E. Dufrechou, P. Ezzatti M. Pedemonte Práctico Programación con CUDA Práctica 0: Ejecución del ejemplo visto en teórico (suma de

Más detalles

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

Computación Heterogénea con OpenCL. Flores, Facundo UNSA Fac. Cs. Exactas Computación Heterogénea con Flores, Facundo UNSA Fac. Cs. Exactas Introducción COMPUTACION HETEROGENEA Introducción COMPUTACION HETEROGENEA Qué es? Introducción COMPUTACION HETEROGENEA Qué es? Un poco

Más detalles

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

Kepler. 1. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes (1571-1630) Índice de contenidos [25 diapositivas] Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga 1. Presentación de la arquitectura [3] 2. Los cores y su organización [7]

Más detalles

Memorias, opciones del compilador y otras yerbas. Clase 3

Memorias, opciones del compilador y otras yerbas. Clase 3 Memorias, opciones del compilador y otras yerbas Clase 3 Memorias en CUDA Grid CUDA ofrece distintas memorias con distintas características. Block (0, 0) Shared Memory Block (1, 0) Shared Memory registros

Más detalles

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

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 cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Realizado por: Raúl García Calvo Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar Objetivos Implementar un algoritmo

Más detalles

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

Arquitecturas y programación de procesadores gráficos. Nicolás Guil Mata Dpto. de Arquitectura de Computadores Universidad de Málaga Arquitecturas y programación de procesadores gráficos Dpto. de Arquitectura de Computadores Universidad de Málaga Indice Arquitectura de las GPUs Arquitectura unificada Nvidia: GT200 Diagrama de bloques

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 5 Programación Avanzada y Optimización Computación de Propósito General en Unidades de Procesamiento Gráfico () P. Ezzatti, M. Pedemontey E. Dufrechou Clase 5 Programación Avanzada y Optimización Contenido Memoria compartida Conflicto de bancos

Más detalles

Arquitectura de aceleradores. Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC bc@famaf.unc.edu.ar

Arquitectura de aceleradores. Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC bc@famaf.unc.edu.ar Arquitectura de aceleradores Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC bc@famaf.unc.edu.ar Contenidos Cómo llegamos hasta acá Qué hay ahora Qué hace Cómo lo uso Hacia dónde parece que

Más detalles

PAP - Programación y Arquitecturas Paralelas

PAP - Programación y Arquitecturas Paralelas Unidad responsable: 270 - FIB - Facultad de Informática de Barcelona Unidad que imparte: 701 - AC - Departamento de Arquitectura de Computadores Curso: Titulación: 2016 GRADO EN INGENIERÍA INFORMÁTICA

Más detalles

Sistemas Complejos en Máquinas Paralelas

Sistemas Complejos en Máquinas Paralelas Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric

Más detalles

Programación de altas prestaciones utilizando GPUs

Programación de altas prestaciones utilizando GPUs Programación de altas prestaciones utilizando GPUs //Sintaxis deprecated glbegin(gl_quads); { gltexcoord2f(0, 0); gltexcoord2f(1, 0); gltexcoord2f(1, 1); gltexcoord2f(0, 1); } glend(); Aplicación 3D Llamadas

Más detalles

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

Bloque IV. Prácticas de programación en CUDA. David Miraut Marcos García Ricardo Suárez Bloque IV Prácticas de programación en CUDA David Miraut Marcos García Ricardo Suárez Control de flujo Situaciones no tratadas Claves con tamaños diferentes. Cada Wrap debería acceder a claves del mismo

Más detalles

Procesamiento Paralelo

Procesamiento Paralelo Procesamiento Paralelo OpenCL - Introducción Javier Iparraguirre Universidad Tecnológica Nacional, Facultad Regional Bahía Blanca 11 de Abril 461, Bahía Blanca, Argentina jiparraguirre@frbb.utn.edu.ar

Más detalles

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 programación de códigos paralelos con CUDA y su ejecución en un GPU multi-hilos Introducción a la programación de códigos paralelos con CUDA y su ejecución en un GPU multi-hilos Gerardo A. Laguna-Sánchez *, Mauricio Olguín-Carbajal **, Ricardo Barrón-Fernández *** Recibido: 02 de

Más detalles

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior MEMORIA DINAMICA

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior MEMORIA DINAMICA MEMORIA DINAMICA 1 Introducción La allocación dinámica de memoria en C trata de la solicitud de memoria en tiempo de ejecución La memoria se administra estática, automática o dinámicamente - Las variables

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU Computación de Propósito General en Unidades de Procesamiento Gráfico () R. Bayá, E. Dufrechou, P. Ezzattiy M. Pedemonte Clase 1 Introducción Contenido Un poco de historia El pipeline gráfico Tarjetas

Más detalles

Sistemas Operativos. Procesos

Sistemas Operativos. Procesos Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 1 Introducción Computación de Propósito General en Unidades de Procesamiento Gráfico () P. Ezzatti, M. Pedemontey E. Dufrechou Clase 1 Introducción Contenido Un poco de historia El pipeline gráfico Tarjetas programables

Más detalles

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

FLAG/C. Una API para computación matricial sobre GPUs. M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí FLAG/C Una API para computación matricial sobre GPUs M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí High Performance Computing & Architectures Group Universitat Jaume I de Castellón

Más detalles

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

Tile64 Many-Core. vs. Intel Xeon Multi-Core Tile64 Many-Core vs. Intel Xeon Multi-Core Comparación del Rendimiento en Bioinformática Myriam Kurtz Francisco J. Esteban Pilar Hernández Juan Antonio Caballero Antonio Guevara Gabriel Dorado Sergio Gálvez

Más detalles

CDI Arquitecturas que soportan la concurrencia. granularidad

CDI Arquitecturas que soportan la concurrencia. granularidad granularidad Se suele distinguir concurrencia de grano fino es decir, se aprovecha de la ejecución de operaciones concurrentes a nivel del procesador (hardware) a grano grueso es decir, se aprovecha de

Más detalles

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

FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013 FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS CNCA Abril 2013 6. COMPUTACIÓN DE ALTO RENDIMIENTO Ricardo Román DEFINICIÓN High Performance Computing - Computación de Alto Rendimiento Técnicas, investigación

Más detalles

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

Utilización de la programación paralela en procesadores gráficos para el cálculo científico. Utilización de la programación paralela en procesadores gráficos para el cálculo científico. EMNO 2013 Rolando E. Rodríguez Fernández Medicina Computacional, Instituto de Nefrología. y Facultad de Física,

Más detalles

Funciones y paso de parámetros

Funciones y paso de parámetros Unidad Didáctica 24 Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Índice Consideraciones sobre funciones Estructura de una función

Más detalles

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

MAGMA. Matrix Algebra on GPU and Multicore Architecture. Ginés David Guerrero Hernández PLASMA GPU MAGMA Rendimiento Trabajo Futuro MAGMA Matrix Algebra on GPU and Multicore Architecture Ginés David Guerrero Hernández gines.guerrero@ditec.um.es Grupo de Arquitecturas y Computación Paralela

Más detalles

GPU - Procesadores de vértices

GPU - Procesadores de vértices GPU - Procesadores de vértices Sistemas Gráficos 66.71 UBA 2014 Sistemas Gráficos 66.71 (UBA) GPU - Procesadores de vértices 2014 1 / 28 Índice 1 Arquitectura de la GPU Vertex Shaders Actividad 1 Actividad

Más detalles

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

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados

Más detalles

FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II

FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II 2013 Características principales de la arquitectura del procesador AMD Phenom

Más detalles

Programación de GPUs con CUDA

Programación de GPUs con CUDA Programación de GPUs con CUDA Alvaro Cuno 23/01/2010 1 Agenda GPUs Cuda Cuda + OpenGL 2 GPUs (Graphics Processing Units) 3 Supercomputadores Mapa de los 100 supercomputadores Sudamérica: posiciones 306

Más detalles

1 Primitivas básicas de OpenMP

1 Primitivas básicas de OpenMP 1 Primitivas básicas de OpenMP Consultar la página oficial de la plataforma OpenMP http://www.openmp.org/drupal/ Pragmas Es una directiva para el compilador que permite la definición de nuevas directivas

Más detalles

Tema 6: Memoria dinámica

Tema 6: Memoria dinámica : Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0

Más detalles

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla PROGRAMACIÓN DE COMPUTADORES DE MEMORIA DISTRIBUIDA USANDO MPI. PREPARACIÓN

Más detalles

Múltiples GPU (y otras chauchas)

Múltiples GPU (y otras chauchas) Múltiples GPU (y otras chauchas) Clase 16, 21/11/2013 http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Carlos Bederián bc@famaf.unc.edu.ar IFEG-CONICET, FaMAF-UNC Motivación No desperdiciar

Más detalles

Programando la GPU con CUDA RIO 2014 Río Cuarto (Argentina), 17 y 18 de Febrero, 2014. Agradecimientos. Prerrequisitos para este tutorial

Programando la GPU con CUDA RIO 2014 Río Cuarto (Argentina), 17 y 18 de Febrero, 2014. Agradecimientos. Prerrequisitos para este tutorial Programando la GPU con CUDA RIO 2014 Río Cuarto (Argentina), 17 y 18 de Febrero, 2014 Manuel Ujaldon Nvidia CUDA Fellow Profesor del Dpto. de Arquitectura de Computadores. Universidad de Málaga (España).

Más detalles

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

HPC y GPUs. GPGPU y software libre. Emilio J. Padrón González DE UNIVERSIDADE DA CORUNA GAC.UDC.ES HPC y GPUs GPGPU y software libre Emilio J. Padrón González DE UNIVERSIDADE DA CORUNA GAC.UDC.ES Workshop HPC y Software Libre Ourense, Octubre 2011 Contenidos 1 Introducción Evolución CPUs Evolución GPUs

Más detalles

J. Nicolás Bustos Pieper. Microprocesadores en. Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC

J. Nicolás Bustos Pieper. Microprocesadores en. Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC Microprocesadores en Consolas Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC 1 Índice Introducción... 3 Xbox 360... 3 PlayStation 3... 5 Wii... 7 Comparativa... 9 Referencias...10

Más detalles

Programación en Intel Xeon Phi

Programación en Intel Xeon Phi Programación en Intel Xeon Phi David Corbalán Navarro Máster en Nuevas Tecnologías de la Informática Índice Introducción al paralelismo Niveles de paralelismo Paradigmas de programación paralela Manycores

Más detalles

Tema 12: El sistema operativo y los procesos

Tema 12: El sistema operativo y los procesos Tema 12: El sistema operativo y los procesos Solicitado: Tarea 06 Arquitecturas de una computadora y el funcionamiento del software M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx

Más detalles

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

Descubriendo Kepler. 1. Presentación de la arquitectura. Agradecimientos. Indice de contenidos [46 diapositivas] Agradecimientos Descubriendo Kepler Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga A los ingenieros de Nvidia, por compartir ideas, material, diagramas, presentaciones,...

Más detalles

TEMA 1: EJECUCIÓN PARALELA: FUNDAMENTOS(I)

TEMA 1: EJECUCIÓN PARALELA: FUNDAMENTOS(I) Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas ARQUITECTURA DE COMPUTADORES II AUTORES: David Expósito Singh Florin Isaila Daniel Higuero Alonso-Mardones Javier García Blas Borja Bergua

Más detalles

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. Tema 2. TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. PARTE : VARIABLES, OPERADORES Y CONSTANTES.. INTRODUCCIÓN AL LENGUAJE C 2. PROGRAMAS BÁSICOS EN LENGUAJE C 3. DATOS EN LENGUAJE C

Más detalles

Examen Teórico (1/3 de la nota final)

Examen Teórico (1/3 de la nota final) Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad

Más detalles

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

Taller: Introducción a GPU's y Programación CUDA para HPC Taller: Introducción a GPU's y Programación CUDA para HPC Amilcar Meneses Viveros Departamento de Computación CINVESTAV-IPN / LUFAC Computación Julio 2011 CONTENIDO I.- INTRODUCCION A GPU's Y CUDA 1.1

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

CLUSTER FING: ARQUITECTURA Y APLICACIONES

CLUSTER FING: ARQUITECTURA Y APLICACIONES CLUSTER FING: ARQUITECTURA Y APLICACIONES Gerardo Ares, Pablo Ezzatti Centro de Cálculo, Instituto de Computación FACULTAD DE INGENIERÍA, UNIVERSIDAD DE LA REPÚBLICA, URUGUAY CONTENIDO Introducción Conceptos

Más detalles

PARTE II PROGRAMACION CON THREADS EN C

PARTE II PROGRAMACION CON THREADS EN C PARTE II PROGRAMACION CON THREADS EN C II.1 INTRODUCCION Una librería o paquete de threads permite escribir programas con varios puntos simultáneos de ejecución, sincronizados a través de memoria compartida.

Más detalles

CAPACIDAD COMPUTACIONAL: Tabla 1: Resumen de algunas características de GPUs CUDA.

CAPACIDAD COMPUTACIONAL: Tabla 1: Resumen de algunas características de GPUs CUDA. IV. CAPACIDAD COMPUTACIONAL: Debido al uso de la tecnología CUDA en computación numérica, se han definido una serie de capacidades que ofrecen más información acerca del rendimiento de los dispositivos

Más detalles

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

Programando con memoria unificada. Contenidos [15 diapositivas] Aportaciones de la memoria unificada. I. Descripción Programando con memoria unificada IX Curso de Verano de la UMA Programación de GPUs con CUDA Contenidos [15 diapositivas] Málaga, del 15 al 24 de Julio, 2015 1. Descripción [5] 2. Ejemplos [8] 3. Observaciones

Más detalles

Programación I Teoría II.

Programación I Teoría II. Programación I Teoría II http://proguno.unsl.edu.ar proguno@unsl.edu.ar MODULARIDAD FUNCIONES EN C Modularidad Principio para resolución de problemas: Dividir para reinar Modularidad Módulo Función Procedimiento

Más detalles

MPP. MIMD Computador Masivamente Paralelo

MPP. MIMD Computador Masivamente Paralelo MPP MIMD Computador Masivamente Paralelo BLUE GENE/Q Introducción Se trata del tercer representante de una serie que comenzó con el Blue Gene/L y continuó con el Blue Gene/P. Son máquinas desarrolladas

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

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

GENERACIÓN DE IMÁGENES VOLUMÉTRICAS DE DATOS BIOMÉDICOS EN TIEMPO REAL Programa Oficial de Postgrado en Ingenierías Transversales Máster en Ingeniería Biomédica Proyecto Fin de Máster GENERACIÓN DE IMÁGENES VOLUMÉTRICAS DE DATOS BIOMÉDICOS EN TIEMPO REAL Autor: D. David Anaya

Más detalles

Programando la GPU con CUDA

Programando la GPU con CUDA Programando la GPU con CUDA Curso en el Dpto. de Matemáticas e Informática. UIB. 23 al 25 de Junio, 2014. Manuel Ujaldon Nvidia CUDA Fellow Profesor Titular del Dpto. de Arquitectura de Computadores. Universidad

Más detalles

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda Tipos de Dispositivos ENTRADA-SALIDA 1. Dispositivos de Bloque: Almacena información en bloques de tamaño fijo (512b hasta 32Kb) Se puede leer o escribir un bloque en forma independiente 2. Dispositivos

Más detalles

Programación Híbrida e Introducción a la Programación de GPUs

Programación Híbrida e Introducción a la Programación de GPUs Programación Híbrida e Introducción a la Programación de GPUs Fernando Robles Morales Instituto Nacional de Medicina Genómica Enrique Cruz Martínez Universidad Autónoma de la ciudad de México CONTENIDO

Más detalles

Universidad Complutense de Madrid FACULTAD DE INFORMÁTICA

Universidad Complutense de Madrid FACULTAD DE INFORMÁTICA Universidad Complutense de Madrid FACULTAD DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA SISTEMAS INFORMÁTICOS ALGORITMOS PARA GRAFOS Y PROGRAMACIÓN DE PROPÓSITO GENERAL EN CUDA Ezequiel Denegri Guillermo Frontera

Más detalles

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

Ejemplos de optimización para Kepler. 1. Balanceo dinámico de la carga. Contenidos de la charla [18 diapositivas] Ejemplos de optimización para Kepler Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga Contenidos de la charla [18 diapositivas] 1. Balanceo dinámico de la carga.

Más detalles

Ejercicios de jerarquía de memoria

Ejercicios de jerarquía de memoria Ejercicios de jerarquía de memoria J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Arquitectura de Computadores Grupo ARCOS Departamento

Más detalles

Cómputo paralelo con openmp y C

Cómputo paralelo con openmp y C Cómputo paralelo con openmp y C Sergio Ivvan Valdez Peña Guanajuato, México. 13 de Marzo de 2012 Sergio Ivvan Valdez Peña Cómputo Guanajuato, paralelo conméxico. openmp y () C 13 de Marzo de 2012 1 / 27

Más detalles

USO DE TECNOLOGÍAS GPU PARA EL DESARROLLO DE ALGORITMOS CRIPTOGRÁFICOS

USO DE TECNOLOGÍAS GPU PARA EL DESARROLLO DE ALGORITMOS CRIPTOGRÁFICOS PONTIFICIA UNIVERSIDAD CATÓLICA DE VALPARAÍSO FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA INFORMÁTICA USO DE TECNOLOGÍAS GPU PARA EL DESARROLLO DE ALGORITMOS CRIPTOGRÁFICOS DANIEL ALEJANDRO TUREO MUÑOZ

Más detalles

TIPOS DE DATOS BASICOS EN LENGUAJE C

TIPOS DE DATOS BASICOS EN LENGUAJE C TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char

Más detalles

Arquitectura de Computadores Problemas (hoja 4). Curso

Arquitectura de Computadores Problemas (hoja 4). Curso Arquitectura de Computadores Problemas (hoja 4). Curso 2006-07 1. Sea un computador superescalar similar a la versión Tomasulo del DLX capaz de lanzar a ejecución dos instrucciones independientes por ciclo

Más detalles

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.

Más detalles

Memoria Dinámica en C++

Memoria Dinámica en C++ Memoria Dinámica en C++ Algoritmos y Estructuras de Datos II DC-FCEyN-UBA 26 de Agosto de 2015 AED2 (DC-FCEyN-UBA) Memoria Dinámica en C++ 26 de Agosto de 2015 1 / 46 Repaso: Qué es una variable? Matemática:

Más detalles

Introducción a la Programación en C Funciones

Introducción a la Programación en C Funciones Christopher Expósito-Izquierdo cexposit@ull.edu.es Airam Expósito-Márquez aexposim@ull.edu.es Israel López-Plata ilopezpl@ull.edu.es Belén Melián-Batista mbmelian@ull.edu.es José Marcos Moreno-Vega jmmoreno@ull.edu.es

Más detalles

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

Técnicas de paralelización de código para robots basados en emociones 1 UNIVERSIDAD POLITECNICA DE VALENCIA G R A D O E N I N G E N I E R Í A I N F O R M Á T I C A Técnicas de paralelización de código para robots basados en emociones TRABAJO FINAL DE GRADO Autor: Francisco

Más detalles

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución

Más detalles

Velocidades Típicas de transferencia en Dispositivos I/O

Velocidades Típicas de transferencia en Dispositivos I/O Entradas Salidas Velocidades Típicas de transferencia en Dispositivos I/O Entradas/Salidas: Problemas Amplia variedad de periféricos Entrega de diferentes cantidades de datos Diferentes velocidades Variedad

Más detalles

Tema 05: Elementos de un programa en C

Tema 05: Elementos de un programa en C Tema 05: Elementos de un programa en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1

Más detalles

Kepler. Contenidos de la charla. Kepler, Johannes ( ) 1. Presentación de la arquitectura

Kepler. Contenidos de la charla. Kepler, Johannes ( ) 1. Presentación de la arquitectura Kepler RIO 2014 Río Cuarto, 20 de Febrero, 2014 Manuel Ujaldón Martínez Dpto. Arquitectura de Computadores. Univ. Málaga. NVIDIA CUDA Fellow. Contenidos de la charla 1. Presentación de la arquitectura

Más detalles

Nociones básicas de computación paralela

Nociones básicas de computación paralela Nociones básicas de computación paralela Javier Cuenca 1, Domingo Giménez 2 1 Departamento de Ingeniería y Tecnología de Computadores Universidad de Murcia 2 Departamento de Informática y Sistemas Universidad

Más detalles

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos. Lenguaje C Un poco de historia C es un lenguaje de propósito general, es decir, se pueden desarrollar aplicaciones de diversas áreas. Dentro de sus principales características podemos mencionar que: Es

Más detalles

Punteros. Índice. 1. Qué es un puntero y por que son importantes.

Punteros. Índice. 1. Qué es un puntero y por que son importantes. Punteros Índice 1. Qué es un puntero y por que son importantes. 2. Punteros a tipos básicos. 3. Punteros sin tipo. 4. Memoria dinámica. 5. Punteros a estructuras. 6. Punteros a matrices. 7. Punteros a

Más detalles

Introducción a C++ Índice

Introducción a C++ Índice Introducción a C++ 1. 2. 3. 4. 5. 6. Índice 1. Diferencias entre C y C++. 2. Diferencias entre C++ y Java. 3. Ejemplos. 4. Funciones. 5. Memoria dinámica 6. Librería de funciones. 1 1. Diferencias entre

Más detalles