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

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

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

Transcripción

1 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

2 CONTENIDO I.- INTRODUCCION A GPU's Y CUDA 1.1 Preliminares de programación y computación paralela. 1.2 Arquitecturas basadas en GPU's. 1.3 El ambiente de desarrollo CUDA. II. PRINCIPIOS Y CONCEPTOS DE PROGRAMACION CUDA 2.1 Tipos de funciones y manejo de memoria. 2.2 Bloques y grids. III.- ESTRUCTURA DE LOS PROGRAMAS CUDA 3.1 Uso de codigo C y C Codigo CUDA (.cu) 3.3 El ambiente de desarrollo con Eclipse IV.- EJEMPLOS Y EJERCICIOS 4.1 Ejemplos con programas de manejo de matrices y vectores: suma, resta, multiplicación, método gaussjordan. V.- COOPERACION ENTRE HILOS 5.1 Manejo de bloques 5.2 Sincronización y memoria compartida

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

4 Preliminares- Computación paralela Computación serial

5 Preliminares - Computación paralela Computación paralela

6 Preliminares - Computadora paralela Computadora con múltiples procesadores que soporta programación paralela. Hay dos categorias importantes de computadoras paralelas: multicomputadoras y multiprocesadores centralizados.

7 Preliminares - Computadora paralela Computadora con múltiples procesadores que soporta programación paralela. Hay dos categorias importantes de computadoras paralelas: multicomputadoras y multiprocesadores centralizados. Memoria Memoria Memoria Multicomputadora: es una computadora paralela construida por múltiples computadoras y una red de interconección. CPU CPU RED CPU

8 Preliminares - Computadora paralela Computadora con múltiples procesadores que soporta programación paralela. Hay dos categorias importantes de computadoras paralelas: multicomputadoras y multiprocesadores centralizados. Multiprocesador centralizado: (o SMP) es un sistema más integrado donde todos los CPU s comparten el acceso a una memoria global. CPU CPU CPU Memoria SMP: Symmetric Multiprocessors

9 Preliminares - Computadora paralela Computadora con múltiples procesadores que soporta programación paralela. Hay Memoria dos categorias CPU CPU importantes CPU de computadoras paralelas: multicomputadoras y multiprocesadores centralizados. CPU CPU CPU Memoria Multiprocesador centralizado: (o SMP) es un sistema más integrado donde todos los CPU s comparten el acceso a una Memoria memoria CPU CPU global. CPU CPU CPU CPU Memoria SMP: Symmetric Multiprocessors

10 Preliminares - Programación paralela Es la programación en un lenguaje que permita indicar explicitamente como distintas partes de una computación pueden ejecutarse concurrentemente por diferentes procesadores.

11 Preliminares - Tipos de paralelismo Tiempo Tiempo Pipeline Tiempo Tiempo Paralelismo a nivel dato (DLP) Paralelismo a nivel thread (TLP) Paralelismo a nivel instrucción (ILP)

12 Preliminares - Paralelización Paralelización Implícita Explícita Hardware Compilador Lenguajes Bibliotecas Arquitecturas Directivas del compilador Sentencias del lenguaje Funciones de sincronización, manejo de seccion crítica,...

13 Preliminares - Proceso Arquitectura von Neumann Programa residente en memoria MEMORIA Carga Ejecuta CPU

14 Preliminares - Proceso Programa cargado en memoria que está en ejecución o listo para ejecución Datos globales y estáticos. Memoria dinámica Código ejecutable. Área de datos Área de código... #define N int varglobal; float arregloglobal[n] int funcionsuma(int a, int b){ }... return a+b; Datos locales: argumentos y variables definidas en una función Área de pila int main(int argc, char **argv){ } int varlocal; varlocal r = suma(5,7); 14

15 Preliminares - Proceso Proceso multithreading tiene un hilo principal y un conjunto de procesos esclavos. Datos globales y estáticos. Memoria dinámica Código ejecutable. Datos locales: argumentos y variables definidas en una función Área de datos Área de código Hilo principal (512MB) Hilo esclavo 1 (4MB) Área de pila Hilo esclavo N (4MB) Esquema de multithreading Hilos de POSIX Hilos OpenMP Controlados por el SO a nivel usuario o a nivel kernel. 15

16 Preliminares - Computación de alto rendimiento Se requieren más transistores en CPU para mejorar el rendimiento (se doblan cada 18 meses según la ley de Moore) Samuel H. Fueller & Lynette I. Millett. Computer, IEEE, pp , January 2011.

17 Preliminares - Computación de alto rendimiento Se requieren más transistores en CPU para mejorar el rendimiento (se doblan cada 18 meses según la ley de Moore) ILP - Paralelismo a nivel instrucción. Superscalar - Múltiples unidades funcionales. Superpipelining - Altas frecuencias. Hyperthreading - Múltiples flujos de ejecución para utilizar recursos ociosos. Aumento en los ciclos de reloj 3.8 GHz: dispación de calor y consumo de energía

18 Preliminares - Computación de alto rendimiento CPU: Tecnologías multicore. Para 2010 no habrá más procesadores de 1 core

19 Preliminares - Computación de alto rendimiento CPU: Tecnologías multicore. Se planea que para 2010 no habrá más procesadores de 1 core

20 Preliminares - Computación de alto rendimiento CPU: Tecnologías multicore. Se planea que para 2010 no habrá más procesadores de 1 core

21 Preliminares - Computación de alto rendimiento CPU: Tecnologías multicore. Se planea que para 2010 no habrá más procesadores de 1 core

22 Preliminares - Computación de alto rendimiento Número de núcleos

23 Preliminares - Computación de alto rendimiento Teraflops

24 Preliminares - Computación de alto rendimiento Teraflops

25 Preliminares - Computación de alto rendimiento nvidia TESLA 448 cores GPU s Teraflops

26 Computación de alto rendimiento Rendimiento de tarjetas GPGPU s

27 Computación de alto rendimiento Glenn Lupton, Don Thulin, Accelerating HPC Using GPU s; white paper; Hewlett-Packard Company June 13, 2008.

28 Tecnologías de GPGPU s Unidades de procesamiento gráfico de propósito general. Procesadores vectoriales. Fabricantes: nvidia, ATI, Intel... La idea es aprovechar las unidades aritméticas y lógicas de los GPU s para hacer computaciones de alto rendimiento.

29 GPGPUS - Procesadores vectoriales Procesador escalar opera sobre números sencillos (escalares). Procesadores vectoriales operan en vectores de números.

30 GPGPUS - Procesadores vectoriales Beneficios de los procesadores vectoriales Compacto: una simple instrucción define N operaciones. Ademas reduce la frecuencia de saltos. Paralelo: N operaciones son paralelas en datos. No hay dependencias. No se requiere de HW para detectar paralelismo. Puede ejecutar en paralelo asumiento N flujos de datos paralelos. Usa patrones de acceso a memoria continua.

31 CPU vs GPU CPU GPU Baja latencia de memoria. Acceso aleatorio. 20GB/s ancho de banda. 0.1Tflop. 1Gflop/watt Modelo de programación altamente conocido. Gran ancho de banda. Acceso secuencial. 100GB/s ancho de banda. 1Tflop. 10 Gflop/watt Modelo de programación muy poco conocido.

32 CPU vs GPU

33 Que es GPGPU? Computación de propósito general usando GPU y API de gráficas en aplicación es distintas a gráficos en 3D. GPU acelera la trayectoria crítica de una aplicación. Algoritmos paralelos sobre datos aprovechan los atributos del GPU. Grandes arreglos de datos, rendimiendo de streaming. Paralelismo de grano fino SIMD. Computaciones de punto flotante de baja latencia. Aplicaciones ver //GPGPU.org Efectos físicps de video juegos (FX), procesamiento de imágenes. Modelado físico, ingeniería computacional, algebra matricial, convolución, correlación, ordenamientos. 33

34 Restricciones previas de GPGPU Trabajar con API diseñados para gráficas Modos de direccionamiento Tamaños de textura Salida limitada Conjunto de instrucciones Falta de operaciones Integer & bit Comunicación limitada Entre pixeles Dispersión a[i] = p Input Registers Fragment Program Output Registers FB Memory per thread per Shader per Context Texture Constants Temp Registers 34

35 CUDA Compute Unified Device Architecture Modelo de programación de propósito general El usuario inicializa conjuntos de threads en el GPU GPU = super-threaded dedicado para procesamiento masivo de datos (co-processor) Conjunto de software dedicado Manejadores de dispositivos, lenguaje y herramientas. Manejador para carga de programas al GPU Manejador Independiente - Optimizado para computaciones Interfaz diseñada para computaciones - API no gráfica Comparte datos con objetos OpenGL en buffer Aceleración garantizada en los accesos a memoria Manejo explicito de la memoria del GPU 35

36 Esquema general de Hardware A nivel alto, una tarjeta gráfica PCI con muchos GPU s y dispositivo de memoria de video de acceso rápido convive en un servidor con uno o dos CPU s multicore. motherboard tarjeta gráfica

37 Esquema general de Hardware Una tarjeta gráfica. Los GPU s se agrupan en módulos llamados SM (Streaming Multiprocessors). SM: grupo de GPU s Tarjeta gráfica: grupo de SM

38 GPU s en los servidores actuales Coprocesadores del CPU. Conexión PCIe (8GB/s) por direccion. Memoria independiente del GPU (gran ancho de banda local, hasta 100GB/s).

39 Un ejemplo del manejo de hardware para CUDA GPU w/ local DRAM (device) CPU (host) 39

40 Configuraciones de HW GPU1 GPU2 GPU3 GPU4 DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N CPU1 CPU2

41 Configuraciones de HW a) b) c) d) 41

42 Ejemplo: G80 de nvidia Host Input Assembler Thread Execution Manager Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Texture Texture Texture Texture Texture Texture Texture Texture Load/store Load/store Load/store Load/store Load/store Load/store Global Memory 42

43 Computación paralela en GPU 8-series GPUs proporcionar de 25 a 200+ GFLOPS en aplicaciones paralelas compiladas en C Disponible en laptops, desktops, y clusters GeForce 8800 El paralelismo eh GPU se duplica cada año Modelo de programación escala de forma transparente Tesla D870 Programación en C con herramientas CUDA Modelo multihilos SPMD utiliza paralelismo en datos y en hilos. Tesla S870 43

44 Plataformas de desarrollo Frameworks, lenguajes y herramientas que nos permiten crear programas que corran en arquitecturas de GPGPU s. OpenCL CUDA Brook+ DirectCompute CAPS

45 Plataformas de desarrollo Frameworks, lenguajes y herramientas que nos permiten crear programas que corran en arquitecturas de GPGPU s. OpenCL CUDA Brook+ DirectCompute CAPS

46 OpenCL Open Computing Language (OpenCL). Framework para escribir programas que se ejecuten en plataformas heterogéneas (CPU s multicore y GPU s). Modelo heterogéneo

47 OpenCL Originalmente fue desarrollador por Apple (con colaboración de AMD, IBM, INTEL, nvidia). Apple manda la propuesta inicial al grupo Krhonos en 2008.

48 OpenCL Define OpenCL C - Variante del ISO C99 optimizado para la computación en GPU. Computación paralela masiva basada en SPMD. Compila para GPU Compila para CPU Código GPU Código CPU

49 OpenCL Define OpenCL C - Variante del ISO C99 optimizado para la computación en GPU. Computación paralela masiva basada en SPMD.

50 OpenCL Define OpenCL C - Variante del ISO C99 optimizado para la computación en GPU. Computación paralela masiva basada en SPMD. 1) Busca GPU disponibles y genera colas de comandos 2) Se especifican los datos y los kernel s necesarios. El RT manda los datos a la RAM de los GPU s.

51 OpenCL Modelo de memoria.

52 OpenCL Modelo de memoria.

53 Plataformas de desarrollo Frameworks, lenguajes y herramientas que nos permiten crear programas que corran en arquitecturas de GPGPU s. OpenCL CUDA Brook+ DirectCompute CAPS

54 CUDA Compute Unified Device Architecture Modelo de programación de propósito general El usuario inicializa conjuntos de threads en el GPU GPU = super-threaded dedicado para procesamiento masivo de datos (co-processor) Conjunto de software dedicado Manejadores de dispositivos, lenguaje y herramientas. Manejador para carga de programas al GPU Manejador Independiente - Optimizado para computaciones Interfaz diseñada para computaciones - API no gráfica Comparte datos con objetos OpenGL en buffer Aceleración garantizada en los accesos a memoria Manejo explicito de la memoria del GPU 54

55 CUDA programación basada en C Aplicacion (programa C) integrada al host+device Partes de código C no paralelo o modestamente paralelo corre en el host Partes altamente paralelas en (SPMD kernel C code) device ( host ) Serial Code ( device ) Parallel Kernel KernelA<<< nblk, ntid >>>(args);... ( host ) Serial Code ( device ) Parallel Kernel KernelB<<< nblk, ntid >>>(args);... 55

56 Plataformas de desarrollo Frameworks, lenguajes y herramientas que nos permiten crear programas que corran en arquitecturas de GPGPU s. OpenCL CUDA Brook+ DirectCompute CAPS

57 Brook+ Lenguaje de programación desarrollado por Stanford University. Desarrollado para utilizar tarjetas aceleradoras gráficas (GPU) para hacer computaciones de propósito general. Extención del lenguaje C.

58 Plataformas de desarrollo Frameworks, lenguajes y herramientas que nos permiten crear programas que corran en arquitecturas de GPGPU s. OpenCL CUDA Brook+ DirectCompute CAPS

59 DirectCompute API desarrollado por Microsoft para desarrollar aplicaciones de propósito específico en unidades de GPU. Corre en Windows Vista y Windows 7. Lenguaje HLSL, sintaxis similar a C.

60 Plataformas de desarrollo Frameworks, lenguajes y herramientas que nos permiten crear programas que corran en arquitecturas de GPGPU s. OpenCL CUDA Brook+ DirectCompute CAPS

61 CAPS Software desarrollado por la compañia HPC Project. Genera código para GPU s al estilo OpenMP a partir de código C o FORTRAN.

62 Contenido Introducción a HPC Tecnología de GPGPU Plataformas de desarrollo Estrategias de programación Comentarios finales y conclusiones

63 Estrategias de programación Buscar particionamiento sobre datos (SPMD). Dominio del problema. Estrategia de paralelismo incremental. Generar operaciones de grano fino. { { { Tamaño del grano: número de computaciones que se ejecutan entre la comunicación y la sincronización.

64 Ejecución de hilos SM1 SM2 SM3 SM4

65 Ejecución de hilos SM1 SM2 SM3 SM4

66 Manejo de cache Kernel alineado Kernel disperso

67 Recordando la arquitectura FERMI Jerarquía de memoria 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 768 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB

68 Registros Por omisión, variables locales de cada kernel se asignan a registros. FERMI:

69 Aprovechar toda la arquitectura ii)la computación paralela llegó para quedarse. GPU1 GPU2 GPU3 GPU4 Se requiere del desarrollo de algoritmos mixtos para aprovechar la potencia computacional de los nuevos servidores y clusters. DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N CPU1 CPU2

70 Aprovechar toda la arquitectura ii)la computación paralela llegó para quedarse. GPU1 GPU2 GPU3 GPU4 Se requiere del desarrollo de algoritmos mixtos para aprovechar la potencia computacional de los nuevos servidores y clusters. DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N CPU1 CPU2 Comunicación entre procesos distribuidos en los CPU s: Paso de mensajes (MPI)

71 Aprovechar toda la arquitectura ii)la computación paralela llegó para quedarse. GPU1 GPU2 GPU3 GPU4 Se requiere del desarrollo de algoritmos mixtos para aprovechar la potencia computacional de los nuevos servidores y clusters. DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N CPU1 CPU2 Cooperación entre cores: Memoria compartida o multithreading (OpenMP, pthreads,..)

72 Aprovechar toda la arquitectura ii)la computación paralela llegó para quedarse. GPU1 GPU2 GPU3 GPU4 Se requiere del desarrollo de algoritmos mixtos para aprovechar la potencia computacional de los nuevos servidores y clusters. DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N CPU1 CPU2 Computación en la GPU: Memoria compartida de grano fino (OpenCL, CUDA, DirectCompute,CAPS,..)

73 Aprovechar toda la arquitectura Multi-GPU ii)la computación paralela llegó para quedarse. GPU1 GPU2 GPU3 GPU4 Se requiere del desarrollo de algoritmos mixtos para aprovechar la potencia computacional de los nuevos servidores y clusters. DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N CPU1 CPU2 Computación en la GPU: Memoria compartida de grano fino (OpenCL, CUDA, DirectCompute,CAPS,..)

74 Aprovechar toda la arquitectura Programas paralelos híbridos ii)la computación paralela llegó para quedarse. GPU1 GPU2 GPU3 GPU4 Se requiere del desarrollo de algoritmos mixtos para aprovechar la potencia computacional de los nuevos servidores y clusters. DDR 1 DDR N Chip set 1 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Chip set 2 DDR 1 DDR N MPI + CPU1 OpenMP pthreads + CPU2 OpenCL CUDA DirectCompute CAPS

75 CUDA -- Entorno de desarrollo y lenguaje Extensiones a C Declspecs global, device, shared, local, constant Palabras clave threadidx, blockidx Escencial syncthreads Runtime API Memory, symbol, execution management device float filter[n]; global void convolve (float *image) { shared float region[m];... region[threadidx.x] = image[i]; syncthreads()... image[j] = result; } // Allocate GPU memory void *myimage = cudamalloc(bytes) Funcion de lanzamiento // 100 blocks, 10 threads per block convolve<<<100, 10>>> (myimage); 75

76 CUDA -- Entorno de desarrollo y lenguaje Extensiones a C Código fuente integrado (foo.cu) cudacc EDG C/C++ frontend Open64 Global Optimizer GPU Assembly foo.s CPU Host Code foo.cpp OCG gcc / cl G80 SASS foo.sass Mark Murphy, NVIDIA s Experience with Open64, open64/2008/papers/101.doc 76

77 Compilando un programa CUDA Virtual Aplicación C/C++ CUDA NVCC Código PTX float4 me = gx[gtid]; me.x += me.y * me.z; código CPU Parallel Thread execution ( PTX ) Virtual Machine e ISA Modelo de programación Ejecución de recursos y estados Física PTX a un Compilador destino ld.global.v4.f32 {$f1,$f3,$f5,$f7}, [$r9+0]; mad.f32 $f1, $f5, $f3, $f1; G80 GPU Código destino 2877

78 Compilador CUDA nvcc Cualquier archivo fuente que contiene extensión CUDA (.cu) se debe compilar con nvcc. El nvcc es un manejador de compilación (compiler driver) que hace llamdos a las herramientas y compiladores necesarios como: cudacc, g++, cl,... nvcc produce un archivo de salida que contiene: Código C (código CPU) PTX (Parallel Thread Excecution) o código objeto. Genera código ejecutable para las plataformas como WINDOWS, LINUX o Mac OS X.

79 Ligado Cualquier archivo ejecutable con código CUDA requiere dos bibliotecas dinámicas: Biblioteca en tiempo de ejecución CUDA (cudart). Biblioteca de núcleo CUDA (cuda).

80 Taller: Introducción a GPU's y Programación CUDA para HPC PARTE II: PRINCIPIOS Y CONCEPTOS DE PROGRAMACION CUDA

81 Dispositivos y threads CUDA Un dispositivo (device) de computadora Es un coprocesador al CPU o host ( memory Tiene su propia memoria DRAM (device Ejecuta muchos threads en paralelo Es un típico GPU pero además puede ser otro tipo de dispositivo de procesamiento paralelo Partes de código con paralelismo en datos se expresan como un dispositivos kernels en los cuales se ejecutan multiples hilos. Diferencias entre hilos GPU y CPU GPU hilos son extremadamente ligeros Muy poca sobrecarga de creación GPU requiere miles de threads para una eficiencia completa CPU multi-core necesita pocos para una eficienca completa 81

82 CUDA programación basada en C Aplicacion (programa C) integrada al host+device Partes de código C no paralelo o modestamente paralelo corre en el host Partes altamente paralelas en (SPMD kernel C code) device ( host ) Serial Code ( device ) Parallel Kernel KernelA<<< nblk, ntid >>>(args);... ( host ) Serial Code ( device ) Parallel Kernel KernelB<<< nblk, ntid >>>(args);... 82

83 G80 en modo CUDA Ejemplo de dispositivo Procesadores ejecutan hilos Nuevo modo de operación / interfaz de HW para las computaciones Host Input Assembler Thread Execution Manager Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Parallel Data Cache Texture Texture Texture Texture Texture Load/store Load/store Load/store Load/sto Global Memory 83

84 Arreglos de Parallel Threads Un kernel de CUDA se ejecuta por un arreglo de threads Todos los threads ejecutan el mismo código (SPMD) Cada hilo tiene un ID que usa para el manejo de las direcciones de memoria y para el control de decisión threadidx.x float x = input[threadidx.x]; float y = func(x); output[threadidx.x] = y; 84

85 Thread Blocks: Cooperación Escalable Divide un arreglo monolítico de de hilos Divide en múltiples bloques Threads en un bloque cooperan via memoria compartida, operaciones atómicas y sincronización por barreras Threads en bloques distintos no pueden cooperar Thread Block 0 Thread Block 1 Thread Block N-1 threadidx.x float x = input[threadidx.x]; float y = func(x); output[threadidx.x] = y; float x = input[threadidx.x]; float y = func(x); output[threadidx.x] = y; float x = input[threadidx.x]; float y = func(x); output[threadidx.x] = y; 85

86 Identificadores de bloques y de hilos Cada hilo usa su ID para identificar el dato sobre el cual trabajara Block ID: 1D o 2D Thread ID: 1D, 2D, o 3D Simplifica el direccionamiento de memoria cuando se trabaja con datos multidimensionales Procesamiento de imágenes Resolución de PDE... 86

87 Modelo de memoria CUDA Memoria global Principalmente es la comunicación de lectura/escritura entre el host y el device ( 0 (0, Block Grid ( 0 (1, Block El contenido es visible a todos los hilos Aceso de gran latencia Registers Shared Memory Registers Registers Shared Memory Registers Veremos la memoria global ( 0 (1, Thread ( 0 (0, Thread ( 0 (1, Thread ( 0 (0, Thread Memoria constante y de texture después... Host Global Memory 87

88 Asignación de memoria al dispositivo CUDA cudamalloc() Grid Asigna un objecto de memoria en la Global Memory Usa dos parámetros Dirección del apuntador al objeto asignado Tamaño del objeto asignado ( 0 (0, Block Shared Memory Registers Registers ( 0 (1, Thread ( 0 (0, Thread ( 0 (1, Block Shared Memory Registers Registers ( 0 (1, Thread ( 0 (0, Thread cudafree() Libera un objeto de la memoria global (global memory). Apuntador del objeto a liberar Host Global Memory 88

89 Asignación de memoria al dispositivo CUDA Ejemplo: Asignar memoria para un arreglo 64 * 64 de fp-sp Asociar la memoria asignada a Md (frecuentemente d se usa para indicar una estructura para datos en un dispositivo) TILE_WIDTH = 64; Float* Md; // float *Md; int size = TILE_WIDTH * TILE_WIDTH * sizeof(float); cudamalloc((void**)&md, size); cudafree(md); 89

90 Transferencia de datos Host-Device en CUDA () cudamemcpy transferencia de datos en memoria Grid Requiere de 4 parámetros Block (0, ( 0 Block (1, ( 0 Apuntador al destino Shared Memory Shared Memory Apuntador fuente Registers Registers Registers Registers Número de bytes copiados Tipo de transferencia Thread (0, ( 0 Thread (1, ( 0 Thread (0, ( 0 Thread (1, ( 0 Host to Host Host to Device Device to Host Device to Device Transferencia síncrona Host Global Memory 90

91 Transferencia de datos Host-Device en CUDA Ejemplo Transferir un arreglo de 64 * 64 de fp-sp M esta en la memoria del host y Md en la memoria del dispositivo cudamemcpyhosttodevice y cudamemcpydevicetohost son constantes simbólicas cudamemcpy(md, M, size, cudamemcpyhosttodevice); cudamemcpy(m, Md, size, cudamemcpydevicetohost); 91

92 Revisión de la arquitectura FERMI 512 GPGPU s 16 SM de 32 cores cada uno. 6 particiones de 64 bits cada una. Soporta 6GB de memoria GDDR5 DRAM. Host Interface: conexión entre el CPU y GPU (PCI-Express). GigaThreads despacha los thread blocks a los despachadores de los SM s.

93 Revisión de la arquitectura FERMI Jerarquía de memoria 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 768 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB

94 Revisión de la arquitectura FERMI Jerarquía de memoria 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 768 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB

95 Revisión de la arquitectura FERMI Jerarquía de memoria Configuración 1. 48kb de mem. compartida. 16kb de mem. L1 cache. 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 768 KB Configuración 2. 16kb de mem. compartida. 48kb de mem. L1 cache. 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB

96 Revisión de la arquitectura FERMI Espacio de direcciones de 40 bits

97 Revisión de la arquitectura FERMI Tercera generación de Streaming-Multiprocessor (SM) Grupos de 32 threads (internamente les llaman warp o urdimbre). Existen 2 despachadores de hilos. Se expiden 2 instrucciones a la ves a dos hilos diferentes (excepto si la instruccion es double). Cada instrucción se puede ejecutar en 16 cores, 16 LD/ST o en 4 SFU.

98 Revisión de la arquitectura FERMI

99 Revisión de la arquitectura FERMI Tabla de resumen

100 Taller: Introducción a GPU's y Programación CUDA para HPC PARTE III - ESTRUCTURA DE LOS PROGRAMAS CUDA

101 Aspectos relevantes del API de CUDA: Fácil y ligero El API es una extensión a ANSI C curva de aprendizaje suave El hardware está diseñado para habilitar un runtime y manejador ligero Alto desempeño 101

102 Estructura de un programa CUDA programa_generico.cu // Sentencias del precompilador #include <stdio.h> #include <stdlib.h> #include <cuda.h> #define N // Variables globales int vglobal; device float escalar; // Funciones en CPU void funcion1() {... } int funcion2(int a, int b) {... } // Funciones en GPU (kernels) device int funcionk(int a) { int resultado;... return resultado; } global void kernel1() {...} global void kernel2() {...} // Funcion principal int main(int argc, char **argv) {... }

103 Estructura de un programa CUDA El programa puede estar en varios módulos: módulos con código CUDA (.cu) módulos con código C++ (.cpp) módulos con código C (.c) Se compilan y ligan con nvcc tal y como si fuera cualquier compilador de C++ o C. Ejemplo % nvcc -o ejecu kernels.cu funciones.c main.c -lm -lc

104 Declaración de funciones CUDA device float DeviceFunc() global void KernelFunc() Se ejecuta en device device Sólo se invoca desde: device host host float HostFunc() host host global define una funcion kernel Debe regresar void

105 Estructura de un programa CUDA programa_generico.cu // Variables globales int vglobal; device float escalar; // Funciones en CPU void funcion1() {...; vglobal=valor;... } int funcion2(int a, int b) {... // llamado a kernel kernel1<<dimgrid,dimblock>>()... } // Funciones en GPU (kernels) device int funcionk(int a) { int resultado;... return resultado; } global void kernel1() { int a = escalar; } global void kernel2() {... r = funcionk(threadidx.x);... }

106 Estructura de un programa CUDA programa_generico.cu // Variables globales int vglobal; device float escalar; // Funciones en CPU void funcion1() {...; vglobal=valor;... } int funcion2(int a, int b) {... // llamado a kernel kernel1<<dimgrid,dimblock>>()... } // Funciones en GPU (kernels) device int funcionk(int a) { int resultado;... return resultado; } global void kernel1() { int a = escalar; } global void kernel2() {... r = funcionk(threadidx.x);... }

107 Proceso con código ejecutable cuda Datos globales y estáticos. Memoria dinámica Área de datos Código ejecutable. Código de CPU (funciones) Código de GPGPU (kernel... PTX) } Área de código Datos locales: argumentos y variables definidas en una función Área de pila 107

108 Declaración de funciones CUDA device functions - no se puede tener su dirección de memoria Para funciones ejecutadas en el device: No recursión No debe haber declaraciones de variables estáticas dentro de la función No pueden tener un número variable de argumentos

109 Llamado a una función de Kernel - Creación de hilos Una función de kernel debe llamarse con una configuración de ejecución: global void KernelFunc(...); dim3 DimGrid(100, 50); // 5000 thread blocks dim3 DimBlock(4, 8, 8); // 256 threads per block size_t SharedMemBytes = 64; // 64 bytes of shared memory KernelFunc<<< DimGrid, DimBlock, SharedMemBytes >>>(...); Cualquier llamado a una función de kernel function es asíncronca desde CUDA 1.0, se requiere de una síncronización explícita para el bloqueo.

110 Programa CUDA A nivel alto, tenemos un proceso principal el cual se ejecuta en el CPU y ejecuta los siguientes pasos: 1.Inicializa la tarjeta. 2.Asigna memoria en el host y en el device. 3.Copia datos del host al device. 4.Asinga multiples copias de kernel s de ejecución al device. 5.Copia datos de la memoria del device a la memoria del host. 6.Repite pasos 3 a 5 como sea necesario. 7.Libera memoria (del host y device ) y termina.

111 Ejecución de un proceso CUDA A nivel bajo, en el GPU: 1.Cada copia de ejecución de un kernel se ejecuta en un SM. 2.Si el número de copias excede el número de SM, entonces mas de una copia se ejecutará en un SM si existen recursos disponibles (registros y memoria compartida). 3.Cada hilo en una copia del kernel accesa a su propia memoria compartida, pero y no puede accesar a la memoria compartida de la copia. 4.No hay garantia del orden de ejecución de las copias del kernel.

112 Ejecución de un proceso CUDA A nivel bajo, en el GPU: 1.Cada copia de ejecución de un kernel se ejecuta en un SM. 2.Si el número de copias excede el número de SM, entonces mas de una copia se ejecutará en un SM si existen recursos disponibles (registros y memoria compartida). 3.Cada hilo en una copia del kernel accesa a su propia memoria compartida, pero y no puede accesar a la memoria compartida de la copia. SM1 SM2 SM3 SM4 4.No hay garantia del orden de ejecución de las copias del kernel.

113 EJEMPLOS - Mi primer programa CUDA Recuerde que hay código para el host y código para el device. primero.cu Código host int main(int argc, char **argv) { float *h_x, *d_x; // h=host, d=device int nblocks=2, nthreads=8, nsize=2*8; h_x = (float *)malloc(nsize*sizeof(float)); cudamalloc((void **)&d_x,nsize*sizeof(float)); my_first_kernel<<<nblocks,nthreads>>>(d_x); cudamemcpy(h_x,d_x,nsize*sizeof(float), cudamemcpydevicetohost); } for (int n=0; n<nsize; n++) printf(" n, x = %d %f \n",n,h_x[n]); cudafree(d_x); free(h_x);

114 EJEMPLOS - Mi primer programa CUDA Recuerde que hay código para el host y código para el device. primero.cu Código kernel //#include <cutil_inline.h> global void my_first_kernel(float *x) { int tid = threadidx.x + blockdim.x*blockidx.x; } x[tid] = threadidx.x;

115 Taller: Introducción a GPU's y Programación CUDA para HPC PARTE IV - EJEMPLOS Y EJERCICIOS

116 EJEMPLOS - Multiplicación de matrices Una simple ejemplo de multiplicación de matrices ilustra las características básicas de memoria y el manejo de hilos en programas CUDA. Usaremos sólo registros. Usaremos el identificador del usuario. Usaremos el API de transferencia de memoria entre host y el device. Por simplicidad, asumiremos que la matriz es cuadrada.

117 EJEMPLOS - Multiplicación de matrices C = A * B de tamaño n x n Un thread calcula un elemento de C A y B se cargan n veces desde la memoria global N B M A P C WIDTH n n WIDTH n WIDTH n WIDTH

118 EJEMPLOS - Multiplicación de matrices Almacenamiento en la memoria de una matriz, en C. M 0,0 M 1,0 M 2,0 M 3,0 M 0,1 M 1,1 M 2,1 M 3,1 M 0,2 M 1,2 M 2,2 M 3,2 M 0,3 M 1,3 M 2,3 M 3,3 M M 0,0 M 1,0 M 2,0 M 3,0 M 1,1 M 0,1 M 2,1 M 3,1 M 0,2 M 1,2 M 2,2 M 3,2 M 0,3 M 1,3 M 2,3 M 3,3

119 EJEMPLOS - Multiplicación de matrices PASO 1: La versión simple en C // Multiplicacion de matrices en el host (CPU) ( n void MatrixMulOnHost(float *A, float *B, float *C, int { } ( i ++ for (int i = 0; i < n; for (int j = 0; j < n; ++j) { } float sum = 0; for (int k = 0; k < n; ++k) { } float a = A[i * n + k]; float b = B[k * n + j]; sum += a * b; C[i * Width + j] = sum; M A i 119 N B P C j k WIDTH n n WIDTH k n WIDTH n WIDTH

120 EJEMPLOS - Multiplicación de matrices PASO 2: Transferencia de datos de la matriz de entrada void MatrixMulOnDevice(float *A, float *B, float *C, int n) { int size = n*n*sizeof(float); float *Ad, *Bd, *Cd; 1. // Asigna y carga M, N a la memoria //del dispositivo cudamalloc(&ad, size); cudamemcpy(ad, A, size, cudamemcpyhosttodevice); cudamalloc(&bd, size); cudamemcpy(bd, B, size, cudamemcpyhosttodevice); // Asigna P en el dispositivo cudamalloc(&cd, size);

121 EJEMPLOS - Multiplicación de matrices PASO 3: Transferencia de datos de la matriz de salida void MatrixMulOnDevice(float *A, float *B, float *C, int n) { int size = n*n*sizeof(float); float *Ad, *Bd, *Cd; 1. // Asigna y carga M, N a la memoria //del dispositivo cudamalloc(&ad, size); cudamemcpy(ad, A, size, cudamemcpyhosttodevice); cudamalloc(&bd, size); cudamemcpy(bd, B, size, cudamemcpyhosttodevice); 2. // Código de invocación al Kernel // - se muestra después 3. // Lee P del dispositivo cudamemcpy(c, Cd, size, cudamemcpydevicetohost); } // Libera las matrices del dispositivo cudafree(ad); cudafree(bd); cudafree(cd); // Asigna P en el dispositivo cudamalloc(&cd, size);

122 EJEMPLOS - Multiplicación de matrices PASO 4: Función del kernel // kernel de la multiplicacion matricial - por hilo global void MatrixMulKernel(float *A, float *B, float *C, int n) { } float tmp=0.0; for (int k=0; k<n; k++) { float Aelement=A[threadIdx.y*n+k]; } float Belement=B[k*n+threadIdx.x]; tmp += Aelement*Belement; C[threadIdx.y*n+threadIdx.x]=tmp; Md A k n WIDTH ty Nd B Pd C tx tx n WIDTH ty WIDTH n n WIDTH

123 EJEMPLOS - Multiplicación de matrices PASO 5: Invocación del Kernel (del lado del host ). // Se establece la configuración de ejecución dim3 dimgrid(1, 1); dim3 dimblock(n, n); // Asigna los hilos de ejecucion al dispositivo MatrixMulKernel<<<dimGrid, dimblock>>>(ad, Bd, Cd, n);

124 EJEMPLOS - Multiplicación de matrices Sólo se usa un bloque de hilos Sólo un bloque de hilos cálcula a la matriz Cd: Cada hilo calcula un elemento de Cd. Grid 1 Block 1 Thread )2, 2 ( Bd Cada hilo: Carga un renglón de la matriz Ad. Carg una columna de la matriz Ad. Realiza una multiplicación y una suma por cada par de elementos de Ad y Bd. 48 Tamaño de la matriz está limitado por el número de hilos permitidos en un bloque. WIDTH Ad Cd

125 Midiendo el tiempo de ejecución Uso de eventos. Se ejecutan desde el host // 1. Crea e inicializa las estructuras // de eventos cuda cudaevent_t start, stop; cudaeventcreate(&start); cudaeventcreate(&stop); // 2. Registra el evento inicial cudaeventrecord(start, 0); // 3. Ejecutar funciones de cuda // (asignar memoria, copiar datos, // llamar kernel s,... )

126 Midiendo el tiempo de ejecución Uso de eventos. Se ejecutan desde el host // 1. Crea e inicializa las estructuras // de eventos cuda cudaevent_t start, stop; cudaeventcreate(&start); cudaeventcreate(&stop); // 2. Registra el evento inicial cudaeventrecord(start, 0); // 3. Ejecutar funciones de cuda // (asignar memoria, copiar datos, // llamar kernel s,... ) // 4. Registra el evento final cudaeventrecord(stop, 0); cudaeventsynchronize(stop); // 5. Calcular y desplegar el tiempo // de ejecucion float elapsedtime; cudaeventelapsedtime(&elapsedtime, start, stop); printf( Tiempo %4.6f en milseg\n, elapsedtime); // 6. Dar de baja eventos cuda cudaeventdestroy(start); cudaeventdestroy(stop);

127 Ejercicios propuestos para el taller Suma de vectores (y matrices). Multiplicación de un escalar por una matriz. Método Gauss-Jordan para resolver un sistema de ecuaciones y para obtener la inversa de una matriz.

128 TALLER CUDA PARTE V - COOPERACION ENTRE HILOS

129 Ejecución de hilos #include <stdio.h> #define N (33 * 1024) global void add( int *a, int *b, int *c ) { int tid = threadidx.x + blockidx.x * blockdim.x; while (tid < N) { c[tid] = a[tid] + b[tid]; tid += blockdim.x * griddim.x; } }

130 Ejecución de hilos N esta definido por la cantidad add<<<128,128>>>(dev_a, dev_b, dev_c); Total de hilos (33792/16384) = add<<< 64,128>>>(dev_a, dev_b, dev_c); Total de hilos 8192 (33792/8192) = 4.125

131 Ejecución de hilos SM1 SM2 SM3 SM4

132 Ejecución de hilos SM1 SM2 SM3 SM4

133 Recordando la arquitectura FERMI Jerarquía de memoria 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 768 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB

134 Manejo de cache Kernel alineado Kernel disperso

135 Variables globales Variables que son visibles desde distintos kernels. Variables en la memoria del device, no en el host. Cualquier kernel puede hacer operaciones de Lectura/Escritura. Se pueden declarar arreglos de tamaño fijo.

136 Variables constantes Constantes que son visibles desde distintos kernels. constant float a[1024]; Se inicializan desde el host con la función cudamemcpytosymbol Cualquier kernel puede hacer operaciones de Lectura. Se pueden declarar arreglos de tamaño fijo.

137 Constantes Una constante es una variable cuyo valor se pone en tiempo de ejecución. Existen valores que se ponen en tiempo de compilación #define PI f a = b * 2.0f / PI; Estos valores se guardan en el área de código, no ocupan registro pues vienen en el flujo de instrucciones.

138 Registros Por omisión, variables locales de cada kernel se asignan a registros. FERMI:

139 Registros Por omisión, variables locales de cada kernel se asignan a registros. TESLA:

140 Registros

141 Registros El compilador transforma el vector a valores escalares

142 Memoria compartida Variables visibles por todos los hilos de un bloque. Se declaran dentro de un kernel. Puede ser una alternativa al uso de arreglos locales. Reduce el uso de registros cuando una variable tiene el mismo valor en todos los threads.

143 Recordando la arquitectura FERMI Jerarquía de memoria 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 768 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB

144 Reducción Operación producto interior <u,v>= N 1 i=0 u[i] v[i] Cada hilo hace una parte de la operación total y al final se suman los resultados parciales. En cuda podemos ver resultados parciales por hilo y por bloque.

145 Reducción Vector U Vector V

146 Reducción Vector U Vector V Bloque 1

147 Reducción Vector U Vector V Bloque 1 Bloque 2

148 Reducción Vector U Vector V Bloque 1 Bloque 2 Bloque 3

149 Reducción Vector U Vector V Bloque Bloque Bloque Bloque

150 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque

151 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque Bloque

152 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque Bloque Bloque

153 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque Bloque Bloque

154 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque Bloque Bloque

155 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque Bloque Bloque

156 Reducción Vector U Vector V Bloque Bloque Bloque Bloque Bloque Bloque Bloque

157 Reducción // Producto Punto const int N = 33*1024; const int threadsperblock = 256; const int blockspergrid = 32; global void dot(float *a, float *b, float *c) { shared float cache[threadsperblock]; int tid = threadidx.x + blockidx.x * blockdim.x; int cacheindex = threadidx.x; float temp = 0; while (tid < N) { temp += a[tid] * b[tid]; } tid += blockdim.x * griddim.x; } syncthreads(); int i = blockdim.x/2; while (i!= 0) { if (cacheindex < i) } cache[cacheindex] += cache [cacheindex + i]; syncthreads(); i /= 2; if (cacheindex == 0) { c[blockidx.x] = cache[0]; } cache[cacheindex] = temp;

158 Reducción

159 Bibiografía J. Sanders & E. Kandrot; CUDA by Example: An Introduction to General-Purpose GPU Programming; Addison-Wesley Professional, NVIDIA Corporation ; NVIDIA CUDA C, Programming Guide, Version 3.2, Septiembre NVIDIA Corporation ; NVIDIA CUDA, CUDA C Best Practices Guide, Version 3.2, Agosto NVIDIA Corporation ; The CUDA Compiler Driver NVCC; Agosto NVIDIA Corporation; NVIDIA CUDA, Reference Manual, Version 3.2 Beta, Agosto

160 Bibiografía D. Kirk & Wen-Mei W. Hwu; Programming Massively Parallel Processors: A Hands-on Approach; Morgan Kaufmann, Mike Giles; Course on CUDA Programming on NVIDIA GPUs, July NVIDIA Corporation; CUDA Presentation 4.0; Michael J. Quinn; Parallel Programming in C with MPI and OpenMP; McGrawHill, International Edition, Jack Dongara, et. al.; Sourcebook of Parallel Computing, Morgan Kaufmann Ed.;

161 Bibiografía Jack Dongara, et. al.; Sourcebook of Parallel Computing, Morgan Kaufmann Ed.; T.G. Mattson, B.A. Sanders, B.L. Massingill; Patterns For Parallel Programming; Addison Wesley, G.E. Karniadakis, R.M. Kirby II; Parallel Scientific Computing in C ++ and MPI; 2nd edition, Cambridge University Press,

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

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

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

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

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

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

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

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

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

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

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

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

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

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

Heterogénea y Jerárquica

Heterogénea y Jerárquica Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Computación Híbrida, Heterogénea y Jerárquica Contenidos 1 Sistemas 2 Paralelismo anidado 3 Programación híbrida

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

Organización de Computadoras. Turno Recursantes Clase 8

Organización de Computadoras. Turno Recursantes Clase 8 Organización de Computadoras Turno Recursantes Clase 8 Temas de Clase Subsistema de Memoria Organización de Memoria Principal Notas de clase 8 2 Memoria Velocidad del procesador: se duplica cada 18 meses

Más detalles

270068 - PAP - Programación y Arquitecturas Paralelas

270068 - 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: 2014 GRADO EN INGENIERÍA INFORMÁTICA

Más detalles

Procesadores Gráficos: OpenCL para programadores de CUDA

Procesadores Gráficos: OpenCL para programadores de CUDA Procesadores Gráficos: para programadores de CUDA Curso 2011/12 David Miraut david.miraut@urjc.es Universidad Rey Juan Carlos April 24, 2013 Indice Estándar Modelo de de El lenguaje programa de Inicialización

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

CUDA: MODELO DE PROGRAMACIÓN

CUDA: MODELO DE PROGRAMACIÓN CUDA: MODELO DE PROGRAMACIÓN Autor: Andrés Rondán Tema: GPUGP: nvidia CUDA. Introducción En Noviembre de 2006, NVIDIA crea CUDA, una arquitectura de procesamiento paralelo de propósito general, con un

Más detalles

4. Programación Paralela

4. Programación Paralela 4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios

Más detalles

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

Requerimientos principales de un sistema operativo

Requerimientos principales de un sistema operativo Descripción y control de procesos Requerimientos principales de un sistema operativo Intercalar la ejecución de varios procesos para maximizar el uso del procesador proporcionando un tiempo de respuesta

Más detalles

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES.

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES. 1.- a) Explica qué es un bit de información. Qué es el lenguaje binario? Bit es la abreviatura de Binary digit. (Dígito binario). Un bit es un dígito del lenguaje binario que es el lenguaje universal usado

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

Solving Dense Linear Systems on Platforms with Multiple Hardware Accelerators

Solving Dense Linear Systems on Platforms with Multiple Hardware Accelerators Solving Dense Linear Systems on Platforms with Multiple Hardware Accelerators Maribel Castillo, Francisco D. Igual, Rafael Mayo, Gregorio Quintana-Ortí, Enrique S. Quintana-Ortí, Robert van de Geijn Grupo

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

Laboratorio de Herramientas Computacionales

Laboratorio de Herramientas Computacionales Laboratorio de Herramientas Computacionales Tema 1.1 Componentes físicos de la computadora UNIVERSIDAD MICHOACANA DE SAN NICOLÁS DE HIDALGO FACULTAD DE INGENIERIA ELECTRICA M.I. ROSALÍA MORA JUÁREZ Antecedentes

Más detalles

Francisco J. Hernández López

Francisco J. Hernández López 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

Más detalles

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS MAURO CANABÉ SERGIO NESMACHNOW Centro de Cálculo, Facultad de Ingeniería Universidad de la República, Uruguay GPU IMPLEMENTATIONS

Más detalles

Sistemas Operativos. Curso 2016 Procesos

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

Más detalles

Procesos. Procesos. Concurrencia de procesos. Qué es un proceso? Estados de un proceso. Modelo de 2 estados. (C) 2008 Mario Medina 1

Procesos. Procesos. Concurrencia de procesos. Qué es un proceso? Estados de un proceso. Modelo de 2 estados. (C) 2008 Mario Medina 1 Procesos Procesos Mario Medina mariomedina@udec.cl El sistema operativo como administrador de procesos Controla la ejecución de procesos para optimizar criterios Asigna recursos a procesos Facilita sincronización

Más detalles

Figura 1.4. Elementos que integran a la Tecnología de Información.

Figura 1.4. Elementos que integran a la Tecnología de Información. 1.5. Organización, estructura y arquitectura de computadoras La Gráfica siguiente muestra la descomposición de la tecnología de información en los elementos que la conforman: Figura 1.4. Elementos que

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

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Fundamentos de la informática 2. Algoritmos, diagramas de flujo y pseudocódigo Contenido Algoritmos Diagramas de flujo

Más detalles

Organización Básica de un Computador y Lenguaje de Máquina

Organización Básica de un Computador y Lenguaje de Máquina Organización Básica de un Computador y Prof. Rodrigo Araya E. raraya@inf.utfsm.cl Universidad Técnica Federico Santa María Departamento de Informática Valparaíso, 1 er Semestre 2006 Organización Básica

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

Capitulo V Administración de memoria

Capitulo V Administración de memoria Capitulo V Administración de memoria Introducción. Una de las tareas más importantes y complejas de un sistema operativo es la gestión de memoria. La gestión de memoria implica tratar la memoria principal

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

Capítulo 4 Gestión de memoria

Capítulo 4 Gestión de memoria Sistemas operativos: una visión aplicada Capítulo 4 Gestión de memoria Contenido Objetivos del sistema de gestión de memoria Modelo de memoria de un proceso Esquemas de memoria basados en asignación contigua

Más detalles

Tema 1 Fundamentos de Computación

Tema 1 Fundamentos de Computación Tema 1 Fundamentos de Computación Clase 2 Prof. María Alejandra Quintero Asignatura: Informática Escuela de Ingeniería Forestal Puntos a tratar Continuación hardware Memoria principal Dispositivos de almacenamiento

Más detalles

Fundamentos de Computación para Científicos

Fundamentos de Computación para Científicos Fundamentos de Computación para Científicos Conceptos de Sistemas Operativos Noviembre, 2015 Contenido 1 Definición 2 Kernel 3 Procesos 4 Memoria 5 Sistema de Archivos 6 Seguridad y Protección 7 Interfaz

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

Fundamentos de la Programación

Fundamentos de la Programación Fundamentos de la Programación El Software Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas o software. Dos grandes grupos de software

Más detalles

PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato

PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato Contenido Introducción...1 Dato...1 Valor...1 Tipo de Dato...2 Tipo Abstracto

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Tema 8 Procesos. * Definición informal: un proceso es un programa en ejecución

Tema 8 Procesos. * Definición informal: un proceso es un programa en ejecución Tema 8 Procesos 8.1 Aspectos básicos de los procesos 8.1.1 Concepto de proceso * Definición informal: un proceso es un programa en ejecución Un programa ejecutable es un conjunto de instrucciones y datos

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

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

INTRODUCCIÓN A LA PROGRAMACIÓN DE GPUS CON CUDA INTRODUCCIÓN A LA PROGRAMACIÓN DE GPUS CON CUDA Francisco Igual Peña León, 10 de mayo de 2011 PLANIFICACIÓN 1. Miércoles: Conceptos introductorios 1. Breve presentación de conceptos básicos 2. Ejercicios

Más detalles

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

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 Introducción a la Arquitectura y Plataforma de Programación de Cómputo Paralelo CUDA (36 hrs) I Presentación: Instructor M. en C. Cristhian Alejandro Ávila-Sánchez CUDA (Compute Unified Device Architecture)

Más detalles

High Performance Computing and Architectures Group

High Performance Computing and Architectures Group HPCA Group 1 High Performance Computing and Architectures Group http://www.hpca.uji.es Universidad Jaime I de Castellón ANACAP, noviembre de 2008 HPCA Group 2 Generalidades Creado en 1991, al mismo tiempo

Más detalles

CLUSTER FING: ARQUITECTURA Y APLICACIONES

CLUSTER FING: ARQUITECTURA Y APLICACIONES CLUSTER FING: ARQUITECTURA Y APLICACIONES SERGIO NESMACHNOW Centro de Cálculo, Instituto de Computación FACULTAD DE INGENIERÍA, UNIVERSIDAD DE LA REPÚBLICA, URUGUAY CONTENIDO Introducción Clusters Cluster

Más detalles

Intel Tera-Scale Computing Alumno: Roberto Rodriguez Alcala

Intel Tera-Scale Computing Alumno: Roberto Rodriguez Alcala Intel Tera-Scale Computing Alumno: Roberto Rodriguez Alcala 1. Introducción Los procesadores con dos núcleos existen actualmente, y los procesadores de cuatro están insertándose en el mercado lentamente,

Más detalles

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES CÁRDENAS ESPINOSA CÉSAR OCTAVIO racsec_05@hotmail.com Boleta: 2009350122 CASTILLO GUTIÉRREZ

Más detalles

Computación Híbrida, Heterogénea y Jerárquica

Computación Híbrida, Heterogénea y Jerárquica Computación Híbrida, Heterogénea y Jerárquica http://www.ditec.um.es/ javiercm/curso psba/ Curso de Programación en el Supercomputador Ben-Arabí, febrero-marzo 2012 Organización aproximada de la sesión,

Más detalles

Tema 2: Arquitectura del repertorio de instrucciones. Visión del computador que tiene el programador en bajo nivel.

Tema 2: Arquitectura del repertorio de instrucciones. Visión del computador que tiene el programador en bajo nivel. Tema 2: Arquitectura del repertorio de instrucciones Visión del computador que tiene el programador en bajo nivel. Lo que el programador en lenguaje ensamblador debe conocer para escribir programas: (1)

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

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

Introducción. Por último se presentarán las conclusiones y recomendaciones pertinentes. Introducción En el presente documento se explicarán las consideraciones realizadas para implementar la convolución bidimensional en la arquitectura CUDA. En general se discutirá la metodología seguida

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

Introducción Componentes Básicos Concurrencia y Paralelismo Ejemplos Síntesis Lecturas Recomendadas. Arquitectura de Computadoras

Introducción Componentes Básicos Concurrencia y Paralelismo Ejemplos Síntesis Lecturas Recomendadas. Arquitectura de Computadoras Arquitectura de Computadoras Contenidos 1 Introducción Computadora Arquitectura Partes de una arquitectura 2 Componentes Básicos CPU Jerarquía de Memoria 3 Concurrencia y Paralelismo Arquitecturas concurrentes

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

Planificación de Procesos. Módulo 5. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco

Planificación de Procesos. Módulo 5. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco Planificación de Procesos Módulo 5 Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco Planificación de Procesos Conceptos Básicos Criterios de Planificación

Más detalles

Tema: Arreglos de Objetos en C++.

Tema: Arreglos de Objetos en C++. Programación II. Guía 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Arreglos de Objetos en C++. Objetivos Específicos Describir la implementación de arreglos de Objetos.

Más detalles

Arquitecturas basadas en computación gráfica (GPU)

Arquitecturas basadas en computación gráfica (GPU) Arquitecturas basadas en computación gráfica (GPU) Francesc Guim Ivan Rodero PID_00184818 CC-BY-NC-ND PID_00184818 Arquitecturas basadas en computación gráfica (GPU) Los textos e imágenes publicados en

Más detalles

CUDA (Compute Unified Device Architecture)

CUDA (Compute Unified Device Architecture) CUDA (Compute Unified Device Architecture) Alvaro Cuno 23/01/2010 1 CUDA Arquitectura de computación paralela de propósito general La programación para la arquitectura CUDA puede hacerse usando lenguaje

Más detalles

Requerimientos Principales de un Sistema Operativo. Descripción y Control de Procesos. Proceso

Requerimientos Principales de un Sistema Operativo. Descripción y Control de Procesos. Proceso Requerimientos Principales de un Sistema Operativo Descripción y Control de Procesos Capítulo 3 Entrelazar la ejecución de varios procesos para maximizar el uso del procesador a la vez que se mantiene

Más detalles

servicios. El API es definido al nivel de código fuente y proporciona el nivel de

servicios. El API es definido al nivel de código fuente y proporciona el nivel de GLOSARIO API Application Program -ming- Interface Es la interfaz por la cual una aplicación accede al sistema operativo u a otros servicios. El API es definido al nivel de código fuente y proporciona el

Más detalles

Familia de procesadores Intel x86

Familia de procesadores Intel x86 Familia de procesadores Intel x86 Mario Medina C. mariomedina@udec.cl Intel 8086 y 8088 8086: 1978, 29K transistores 8 Registros de 16 bits Bus de datos de 16 bits Bus de dirección de 20 bits Multiplexado

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

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

CAPÍTULO I. Sistemas de Control Distribuido (SCD). 1.1 Sistemas de Control. Un sistema es un ente cuya función es la de recibir acciones externas llamadas variables de entrada que a su vez provocan una o varias reacciones como respuesta llamadas variables

Más detalles

Módulo: Modelos de programación para Big Data

Módulo: Modelos de programación para Big Data Program. paralela/distribuida Módulo: Modelos de programación para Big Data (título original: Entornos de programación paralela basados en modelos/paradigmas) Fernando Pérez Costoya Introducción Big Data

Más detalles

UNIVERSIDAD DE ORIENTE FACULTAD DE ICIENCIAS ECONOMICAS LAS REDES I. Licda. Consuelo Eleticia Sandoval

UNIVERSIDAD DE ORIENTE FACULTAD DE ICIENCIAS ECONOMICAS LAS REDES I. Licda. Consuelo Eleticia Sandoval UNIVERSIDAD DE ORIENTE FACULTAD DE ICIENCIAS ECONOMICAS LAS REDES I Licda. Consuelo Eleticia Sandoval OBJETIVO: ANALIZAR LAS VENTAJAS Y DESVENTAJAS DE LAS REDES DE COMPUTADORAS. Que es una red de computadoras?

Más detalles

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

Introducción a Cómputo Paralelo con CUDA C/C++ 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

Más detalles

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp Realizado por: Bertha Palomeque A. Rodrigo Barzola J. INTRODUCCION DIFERENCIAS EJEMPLOS JAVA Orientado a Objetos Multiplataforma Programar

Más detalles

Arquitecturas de Computadoras II. Febrero 2013

Arquitecturas de Computadoras II. Febrero 2013 Arquitecturas de Computadoras II Febrero 2013 1 Sabes... 1. Cuál es la Arquitectura Von Neumann? 2. Qué es Programación? 3. Qué es un algoritmo? 4. Qué es un programa? 5. Qué es un sistema? 6. Materias

Más detalles

15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores.

15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores. UNIDAD TEMÁTICA 5: MULTIPROCESADORES. 15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores. 15-1 TEMA 15: ARQUITECTURA DE LOS MULTIPROCESADORES.

Más detalles

Procesos, hilos y Recursos

Procesos, hilos y Recursos Sistemas Operativos Pontificia Universidad Javeriana Febrero de 2010 Process Manager Procesos Clasicos Procesos Modernos Process Manager Objetivo El manejador de procesos provee un espectro de servicios

Más detalles

Programación en LabVIEW para Ambientes Multinúcleo

Programación en LabVIEW para Ambientes Multinúcleo Programación en LabVIEW para Ambientes Multinúcleo Agenda Introducción al Multithreading en LabVIEW Técnicas de Programación en Paralelo Consideraciones de Tiempo Real Recursos Evolución de la Instrumentación

Más detalles

Hilos, comunicación y competencia entre procesos. Dr. Alonso Ramírez Manzanares 2-Sep-2010

Hilos, comunicación y competencia entre procesos. Dr. Alonso Ramírez Manzanares 2-Sep-2010 Hilos, comunicación y competencia entre procesos Dr. Alonso Ramírez Manzanares 2-Sep-2010 Implementación de procesos Se mantiene una tabla de procesos con una entrada por cada proceso: Con lo cual tenemos

Más detalles

Capítulo 1 Introducción a la Computación

Capítulo 1 Introducción a la Computación Capítulo 1 Introducción a la Computación 1 MEMORIA PRINCIPAL (RAM) DISPOSITIVOS DE ENTRADA (Teclado, Ratón, etc) C P U DISPOSITIVOS DE SALIDA (Monitor, Impresora, etc.) ALMACENAMIENTO (Memoria Secundaria:

Más detalles

MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA. Elaborado por: Julián A. Hernández M.

MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA. Elaborado por: Julián A. Hernández M. MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA Elaborado por: Julián A. Hernández M. PONTIFICIA UNIVERSIDAD JAVERIANA CALI SANTIAGO DE CALI 2011 CONTENIDO Pág. INTRODUCCIÓN...3 1. ANÁLISIS

Más detalles

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

Técnicas SuperEscalares en la Paralelización de Bibliotecas de Computación Matricial sobre Procesadores Multinúcleo y GPUs Técnicas SuperEscalares en la Paralelización de Bibliotecas de Computación Matricial sobre Procesadores Multinúcleo y GPUs Enrique S. Quintana-Ortí quintana@icc.uji.es High Performance Computing & Architectures

Más detalles

SISTEMAS OPERATIVOS AVANZADOS

SISTEMAS OPERATIVOS AVANZADOS SISTEMAS OPERATIVOS AVANZADOS TEMA 3 CLAVE: MIS 204 PROFESOR: M.C. ALEJA DRO GUTIÉRREZ DÍAZ 3. PROCESOS CONCURRENTES 3.1 Conceptos de programación concurrente 3.2 El problema de la sección crítica 3.3

Más detalles

Desarrollo de Aplicaciones Web Por César Bustamante Gutiérrez. Módulo I: Conceptos Básicos Tema 1: Concepto iniciales. www.librosdigitales.

Desarrollo de Aplicaciones Web Por César Bustamante Gutiérrez. Módulo I: Conceptos Básicos Tema 1: Concepto iniciales. www.librosdigitales. 1 Arquitectura de una Aplicación Android Para empezar con el desarrollo de aplicaciones en Android es importante conocer cómo está estructurado este sistema operativo. A esto le llamamos arquitectura y

Más detalles

Intel XeonPhi Workshop

Intel XeonPhi Workshop Intel XeonPhi Workshop Elena Núñez-González Unidad Informática Científica - CIEMAT Madrid, 11 de Febrero de 2015 Evento Lugar, Fecha Índice Introducción MIC Intel Xeon Phi Arquitectura Intel Xeon Phi Entorno

Más detalles

Tema 3. Buses. Arquitectura de computadores. Plan 96. Curso 2010-2011. Jerarquía de buses

Tema 3. Buses. Arquitectura de computadores. Plan 96. Curso 2010-2011. Jerarquía de buses Tema 3. Buses 1. Introducción Jerarquía de buses Clasificación Fases de una transacción 2. Transferencia de datos 3. Temporización Bus síncrono Bus asíncrono Bus semisíncrono 4. Arbitraje del bus Centralizado

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

I NTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA

I NTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA I. INTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA 1.1. Informática Informática (Información Automática) es la ciencia y la técnica del tratamiento automatizado de la información mediante el uso de ordenadores.

Más detalles

SOLUCION EXAMEN junio 2006

SOLUCION EXAMEN junio 2006 SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los

Más detalles

COMPUTADORES MULTINUCLEO. Stallings W. Computer Organization and Architecture 8ed

COMPUTADORES MULTINUCLEO. Stallings W. Computer Organization and Architecture 8ed COMPUTADORES MULTINUCLEO Stallings W. Computer Organization and Architecture 8ed Computador multinucleo Un computador multinúcleocombina dos o mas procesadores (llamados núcleos) en una única pieza de

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

Arquitectura Cliente/Servidor

Arquitectura Cliente/Servidor Arquitectura Cliente/Servidor Claudio Cubillos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso, Chile claudio.cubillos@ucv.cl Arquitectura cliente/servidor v Servidor: rol

Más detalles

Objetivos. El alumno conocerá los elementos indispensables de un ambiente de programación y será capaz de realizar programas básicos en lenguaje C.

Objetivos. El alumno conocerá los elementos indispensables de un ambiente de programación y será capaz de realizar programas básicos en lenguaje C. Objetivos El alumno conocerá los elementos indispensables de un ambiente de programación y será capaz de realizar programas básicos en lenguaje C. Al final de esta práctica el alumno podrá: 1. Decir cuáles

Más detalles

Xerox 700 Digital Color Press con Integrated Fiery Color Server. Impresión de datos variables

Xerox 700 Digital Color Press con Integrated Fiery Color Server. Impresión de datos variables Xerox 700 Digital Color Press con Integrated Fiery Color Server Impresión de datos variables 2008 Electronics for Imaging, Inc. La información de esta publicación está cubierta por los Avisos legales para

Más detalles

Cómputo en paralelo con OpenMP 1

Cómputo en paralelo con OpenMP 1 Cómputo en paralelo con OpenMP 1 Miguel Vargas-Félix miguelvargas@cimat.mx http://www.cimat.mx/~miguelvargas CIMAT, September 2, 2015 1/34 Velocidad de los procesadores de escritorio Recientemente, la

Más detalles

Unidad II: Administración de Procesos y del procesador

Unidad II: Administración de Procesos y del procesador Unidad II: Administración de Procesos y del procesador 2.1 Concepto de proceso Un proceso no es más que un programa en ejecución, e incluye los valores actuales del contador de programa, los registros

Más detalles

Plataformas de soporte computacional: arquitecturas avanzadas,

Plataformas de soporte computacional: arquitecturas avanzadas, Plataformas de soporte computacional: arquitecturas avanzadas, sesión 2 Diego. Llanos, Belén Palop Departamento de Informática Universidad de Valladolid {diego,b.palop}@infor.uva.es Índice 1. Segmentación

Más detalles

Procesos. Bibliografía. Threads y procesos. Definiciones

Procesos. Bibliografía. Threads y procesos. Definiciones Procesos Prof. Mariela Curiel Bibliografía A. Tanembaum & M. Van Steen. Sistemas Distribuidos. Principios y Paradigmas. 2da. Edición. Smith & Nair. The Architecture of Virtual Machines. IEEE Computer.

Más detalles