Procesadores Gráficos: OpenCL para programadores de CUDA



Documentos relacionados
Modelo de aplicaciones CUDA

Arquitecturas GPU v. 2013

4. Programación Paralela

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

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

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

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

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.

UNIVERSIDAD DR. JOSE MATIAS DELGADO

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

PROGRAMACIÓN PÁGINAS WEB CON PHP

SOLUCION EXAMEN junio 2006

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Introducción a la programación orientada a objetos

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS

Capítulo 5 Programación del algoritmo en LabVIEW

Tema 4. Gestión de entrada/salida

BASES DE DATOS OFIMÁTICAS

Adquisición de Datos usando Matlab

Microsoft SQL Server Conceptos.

.NET y J2EE VALORACIÓN Y COMPARACIÓN DE LOS ELEMENTOS DE LAS DOS PLATAFORMAS. Definiciones...2 C# y Java...3 Similitudes...4 Ventajas...

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Java Inicial (20 horas)

Creación y administración de grupos de dominio

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

SAP Business Workflow. PDF created with pdffactory trial version

Configuración del servicio de printers CUPS

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

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

CAPITULO 8. Planeamiento, Arquitectura e Implementación

Tutorial CUDA Univ. de Santiago. 6 y 7 de Agosto, 2013

Guía de uso del Cloud Datacenter de acens

Introducción a los Sistemas Operativos

Oracle 12c DISEÑO Y PROGRAMACIÓN

Estructura y Tecnología de Computadores (ITIG) Luis Rincón Córcoles Ángel Serrano Sánchez de León

Windows Server Windows Server 2003

1

picojava TM Características

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Capitulo 5. Implementación del sistema MDM

CDI Exclusión mutua a nivel alto. conceptos

Modelo de Objetos Distribuidos

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

La Arquitectura de las Máquinas Virtuales.

(PHP y APACHE), y el programa de comunicación Skype, para controlar de manera

Generación de código para Hibernate desde modelos UML

Monografía RECINTOS SEGUROS v4.2

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

General Parallel File System

Ejemplos básicos de webmathematica para profesores

Curso de PHP con MySQL Gratis

ikimap. Comparte cartografía.

Creación un instalador con Visual Studio.NET. Irene Sobrón. Ingeniero de Telecomunicaciones por la Escuela Técnica Superior de Bilbao

Talleres CLCAR. CUDA para principiantes. Título. Mónica Liliana Hernández Ariza, SC3UIS-CRC NVIDIA Research Center

UNIVERSIDAD TECNICA DEL NORTE

Tema 2: Implementación del núcleo de un Sistema Operativo

PS.Vending Almacén Pocket PC

Incidencias: Todas las incidencias que ocurrirán durante el apadrinamiento de un niño se deben registrar para poder buscar soluciones.

Práctica 7. Pruebas. Introducir conceptos básicos de pruebas unitarias en sistemas orientados a objetos.

Guía de instalación de la carpeta Datos de IslaWin

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

INGENIERÍA DE SOFTWARE. Sesión 3: Tipos

7. Manejo de Archivos en C.

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

CAPITULO 9. Diseño de una Base de Datos Relacional Distribuida

Práctica 8 - DMA y Almacenamiento Masivo

Gestion de archivos. Problemas al almacenar datos sólo en la memoria:

Sistemas Operativos. Curso 2016 Procesos

Programación Orientada a Objetos con Java

PART II: Moviendo al jugador

Ajustes del Curso en egela (Moodle 2.5)

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

Unidad I. Introducción a la programación de Dispositivos Móviles (Continuación )

Oracle vs Oracle por Rodolfo Yglesias Setiembre 2008

Elementos requeridos para crearlos (ejemplo: el compilador)

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos.

Windows Server 2012: Infraestructura de Escritorio Virtual

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Windows Server 2012: Identidad y Acceso. Módulo 2: Descripción General de Windows Server 2012 Remote Desktop Services.

Guía de Laboratorio Base de Datos I.

Aplicaciones Móviles. Sesión 12: Acceso a datos

CONFIGURACIÓN DEL ADAPTADOR DE RED EN LINUX

Programación páginas web. Servidor (PHP)

Entorno de Ejecución del Procesador Intel Pentium

SEGURIDAD Y PROTECCION DE FICHEROS

Workflows? Sí, cuántos quiere?

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Concurrencia. Primitivas IPC con bloqueo

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web.

CAPITULO IV CONCLUSIONES Y RECOMENDACIONES

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

Unidad 1: Conceptos generales de Sistemas Operativos.

INDICE Parte I: Qué es Visual Foxpro Capitulo 1: Características del Producto

Componentes de Integración entre Plataformas Información Detallada

Cómo acceder a Google Drive? Tiene más funcionalidades una cuenta de Google?

Consultas con combinaciones

V Manual de Portafirmas V.2.3.1

Universidad Autónoma de Baja California Facultad de Ingeniería Mexicali

Transcripción:

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 de 58 Estándar Modelo de de El lenguaje programa de Inicialización de Universidad Rey Juan Carlos

Interfaces de programación GPU A lo largo del tiempo han surgido muchas soluciones: GPGPU Vertex / pixel shaders Muy limitada por las características del cauce gráfico Brook Después Brook+ Despúes CAL/IL (Compute Abstraction Layer) / (Intermediate Language) CUDA Muy extendido Con un modelo de programación sencillo Todas ellas requieren de un conocimiento profundo de la arquitectura utilizada Los detalles que hacen posible un gran rendimiento minan la posibilidad de tener portabilidad entre arquitecturas 3 Estándar Modelo de de El lenguaje programa de Inicialización de

Nos movemos hacia un futuro masivamente paralelo Y esto parece la torre de Babel HMPP StarSS Unified Parallel C NEPAL Cilk ATI Stream Sequoia RapidMind IntelCt Close to Metal Microsoft accelerator Direct Compute CUDA... 58 4 Estándar Modelo de de El lenguaje programa de Inicialización de Universidad Rey Juan Carlos

Nuevo estándar de Khronos para la computación heterogénea la versión 1.0 salió en Dic. 2008 Ha sido muy promocionado por Apple Tienen la marca registrada y Khronos tiene una licencia El chair del grupo de trabajo es Neil Trevett, vicepresidente de nvidia y Presidente del Khronos Group Abierto y libre de royalties Multi-fabricante y multiplataforma Hace uso de todas las entidades / unidades de proceso CPUs, GPUs, APUs y otras Us Facilita la computación heterogénea en sistemas manycore Escala desde soluciones empotradas a HPC Hay un profile especial para el desarrollo en teléfonos móviles, coches... 58 5 Estándar Modelo de de El lenguaje programa de Inicialización de Universidad Rey Juan Carlos

Punto de vista del HW de Un host y múltiples devices Cada device tiene varias unidades de cómputo Cada unidad de cómputo tiene varios elementos de proceso Ejemplo: nvidia Tesla C1060 30 Unidades de Cómputo 8 elementos de proceso = 240 elementos de proceso 6 Estándar Modelo de de El lenguaje programa de Inicialización de

Estructura de la Capa de plataforma (se llama desde el host) Capa de abstracción para los recusos computacionales de distintas fuentes Permite hacer solicitud, selección e inicialización de los recursos computacionales Crea los contextos y colas de trabajo para la computación Runtime (se llama desde el host) Lanza kernels de computación Establece la configuración de la ejecución Gestiona la planificación, cómputo y uso de recursos de Language Sirve para escribir los kernels que se ejecutarán en los dispositivos de computación Basado en C con una interfaz de programación de "plataforma cruzada" Subconjunto de ISO C99 con extensiones del lenguaje Incluye un rico conjunto de funciones built-in, además de operadores estándar de C Puede ser compilado al vuelo (JIT/Online) u offline 58 7 Estándar Modelo de de El lenguaje programa de Inicialización de Universidad Rey Juan Carlos

Ejecución del kernel de vs. CUDA 8 Estándar Modelo de de El lenguaje programa de Inicialización de Grid = NDRange Block = Work-Group Thread = Work-Item

Ejecución del kernel de vs. CUDA 9 Estándar Modelo de de El lenguaje programa de Inicialización de Número total de work groups = G x G y Tamaño de cada work group = S x S y El ID global se puede calcular a partir del Work Group ID y el Local ID

Estándar 10 Modelo de de El lenguaje programa de Inicialización de

Modelo de de Private memory accesible sólo por el work-item en un elemento de proceso. Local memory accesible por cada work-item en un work-group Constant Memory accesible por cada work-group (sólo lectura) Global memory accesible por cada work-group, persistente El programador se encarga de las copias entre del host y la global 58 Estándar 10 Modelo de de El lenguaje programa de Inicialización de Universidad Rey Juan Carlos

Modelo de de Global = Global Memoria accesible a nivel de device ( de vídeo) Shared = Local Memoria accesible a nivel de work-group ( compartida) Local = Private Memoria accesible a nivel de work-item Estándar 11 Modelo de de El lenguaje programa de Inicialización de

Primer ejemplo de código en Estándar 12 Modelo de de El lenguaje programa de Inicialización de

Kernel Equivalente a la función de C ejecutada en el Device Punto de entrada, argumentos, no devuelve valores Programa Colección de kernels y funciones Es equivalente una librería cargada dinámicamente Cola de (Command Queue) Contiene las invocaciones del kernel y otros de (como la copia/mapeo/... de ) Se encola en orden Se ejecuta fuera de orden (opcionalmente, depende de la implementación) Evento Sincroniza la ejecución dentro de una cola y entre colas en un contexto 58 Estándar Modelo de de 13 El lenguaje programa de Inicialización de Universidad Rey Juan Carlos

NDRange Ejecución paralela con un modelo orientado a partición por datos Los kernels se ejecutan a través de 1, 2 ó 3 dimensiones de un espacio indexado en dos niveles llamado NDRange Los kernels se instancian como work-items (hebras de CUDA) y son agrupados en work-groups No hay sincronización entre work-groups, son independientes Las barreras de sincronizan work-items dentro de un work-group El programador elige el NDRange apropiado para el tamaño del problema Estándar Modelo de de 14 El lenguaje programa de Inicialización de

Ejemplo NDRange Procesamos una imagen de 256x256, 1 pixel por work-item Estándar Modelo de de 15 El lenguaje programa de Inicialización de

Ejemplo NDRange Procesamos una imagen de 256x256, 1 pixel por work-item Estándar Modelo de de 16 El lenguaje programa de Inicialización de

Ejemplo NDRange Procesamos una imagen de 256x256, 1 pixel por work-item Estándar Modelo de de 17 El lenguaje programa de Inicialización de

NDRange A cada work-item se le da el mismo argumento, pero tiene un identificador local distinto para cada uno dentro del grupo y un identificador global único Cada work-group tiene también un identificador único Los IDs y los tamaños se pueden obtener mediante funciones get_() El tamaño global es múltiplo del tamaño local Estándar Modelo de de 18 El lenguaje programa de Inicialización de

El lenguaje de Estándar Está basado en C99 con limitaciones y extensiones Limitaciones: no hay recursión, no hay cabeceras tipo C99, no hay campos de bits, no hay funciones a punteros, no hay arrays de tamaño variable, no hay stores accesibles con palabra de tamaño byte : tipos vector, work-items y work-groups, sincronización, funciones de acceso a imágenes, conversiones... Modelo de de El lenguaje 19 programa de Inicialización de

Memoria y sincronización La privada se comporta como una pila de almacenamiento para las hebras La local es compartida y accedida por todos items de un work-group Sincronización a través de barrier(clk_local_mem_fence CLK_GLOBAL_MEM_FENCE); Nos puede servir como en el caso de CUDA para asegurar que se han hecho todas las operaciones entre mem. local y global antes del procesado Estándar Modelo de de El lenguaje 20 programa de Inicialización de

Ejemplo Estándar Modelo de de El lenguaje 21 programa de Inicialización de

Ejemplo Estándar Los bucles (anidados) que recorren los elementos se convierten en el NDRange La parte interna del bucle se convierte en el kernel Modelo de de El lenguaje 22 programa de Inicialización de

Ejemplo Los bucles (anidados) que recorren los elementos se convierten en el NDRange La parte interna del bucle se convierte en el kernel Estándar Modelo de de El lenguaje 23 programa de Inicialización de -

: plataformas, devices y contextos Estándar Modelo de de La runtime library de puede dar soporte a varias plataformas (de diferentes fabricantes) Los devices son consultados desde la plataforma Los contextos se crean para uno o más devices El resto de objetos se crean en el contexto 24 El lenguaje programa de Inicialización de

: Memoria y programas Estándar Modelo de de Los espacios de (bufferes e imágenes) se crean y replican en todos los devices en el contexto Se inicializa y accede utilizando el puntero de host y las operaciones soportadas de map/unmap y read/write/copy Los programas se pueden crear a partir de fuentes o de binarios compilados para los devices 25 El lenguaje programa de Inicialización de

: colas,, eventos y sincronización Estándar Los se mandan a los devices a través de las colas de Casi todos los en la cola esperan por una lista de eventos y producen un evento a su vez Los eventos sólo se pueden utilizar en el contexto en el que son creados Eventos de flush, finish, espera... Eventos barrera, marker... Modelo de de 26 El lenguaje programa de Inicialización de

Estructura básica de un programa Programa en el host Crea objetos de asociados a contextos (1) Compila y crea los kernels (código objeto) (1) Envia los a la cola (1) Sincroniza los (1) Libera los recursos de (1) Se comunica y pregunta a los dispositivos de computación (2) Crea contextos (2) Kernel de computación (se ejecuta en el device) Código C con algunas restricciones y extensiones (3) (1) Capa de plataforma (2) Runtime (3) Lenguaje Estándar Modelo de de El lenguaje 27 programa de Inicialización de

Objetos de de Objetos tipo buffer Colección 1D de objetos (como los arrays de C) Tipos escalar y vectorial, y estructuras definidas por el usuario Se accede via punteros en el kernel Objetos tipo imagen Texturas 2D o 3D, frame-buffer, o imágenes Se accede únicamente a través de funciones built-in Objetos de muestreo Describen cómo se muestrea una imagen en el kernel modos de direccionamiento modos de filtrado Estándar Modelo de de El lenguaje 28 programa de Inicialización de

Highlights del lenguaje qualifiers tipo función kernel declara una función como kernel qualifiers relacionados con espacio de direccionamiento global, local, constant, private funciones de los Work-item get_work_dim() get_global_id(), get_local_id(), get_group_id(), get_local_size() Funciones de imagen Deben ser accedidas a través de las funciones built-in Las lecturas y escrituras se llevan a cabo a través de los objetos de muestreo desde el host ó en el device Funciones de sincronización Barreras Todos los Work Items dentro de un Work Group deben ejecutar la función de barrera antes de que ninguno de ellos pueda continuar 58 Estándar Modelo de de El lenguaje 29 programa de Inicialización de Universidad Rey Juan Carlos

Ejemplo de programa paso a paso 1. Enumerar las plataformas y dispositivos (devices) 2. Crear el contexto 3. Crear la cola de 4. Crear el programa 5. Reservar e inicializar la 6. Poner los argumentos y poner el kernel en la cola 7. Sincronizar 8. Leer los resultados 9. Limpiar Estándar Modelo de de El lenguaje 30 programa de Inicialización de

Enumerar las plataformas Estándar Los dispositivos pueden ser : CL_DEVICE_TYPE_CPU CL_DEVICE_TYPE_GPU CL_DEVICE_TYPE_ACCELERATOR Modelo de de El lenguaje 31 programa de Inicialización de

Creación del contexto de Estándar Modelo de de El lenguaje programa de 32 Inicialización de

Creación de la cola de Estándar Modelo de de El lenguaje programa de 33 Inicialización de

Creación del programa y el kernel Estándar Modelo de de El lenguaje programa de 34 Inicialización de

Creación del programa y el kernel Estándar Modelo de de El lenguaje programa de 35 Inicialización de

Reservar e inicializar Estándar Modelo de de El lenguaje programa de 36 Inicialización de

Reservar e inicializar Estándar Modelo de de El lenguaje programa de 37 Inicialización de

Otras formas de inicializar la Estándar Modelo de de El lenguaje programa de 38 Inicialización de

Estándar Modelo de de El lenguaje programa de Inicialización de 39

Estándar Modelo de de El lenguaje programa de Inicialización de 40

Estándar Modelo de de El lenguaje programa de Inicialización de 41

Estándar Modelo de de El lenguaje programa de Inicialización de 42

Estándar Modelo de de El lenguaje programa de Inicialización de 43

Estándar Modelo de de El lenguaje programa de Inicialización de 44

Estándar Modelo de de El lenguaje programa de Inicialización de 45

Suma de dos vectores (muy grandes) en coma flotante c[i] = a[i] + b[i] Equivalente al bucle de C Estándar Modelo de de El lenguaje programa de El ejemplo oclvectoradd del NVIDIA SDK da más detalles Aquí se ha quitado el código de gestión de errores, salida por consola y comparación con la ejecución en el host Inicialización de 46

Suma Vectores: Secuencia de ejecución Set Up Set work sizes for kernel execution Allocate and init host data buffers Create context for GPU device Query compute devices (in the context) Create command queue (in the context) Create buffers on the GPU device (in the context) Create and build a program (in the context) Create kernel Set kernel arguments Core sequence Copy (write) data from host to GPU Launch kernel in command-queue Copy (read) data from GPU to host... block Clean up Estándar Modelo de de El lenguaje programa de Inicialización de 47

Suma Vectores: Codigo del Kernel Estándar Modelo de de El lenguaje programa de Inicialización de 48

Suma Vectores: Host declaraciones Estándar Modelo de de El lenguaje programa de Inicialización de 49

Suma Vectores: Host setup Estándar Modelo de de El lenguaje programa de Inicialización de 50

Suma Vectores: Contexto, Device & Colas Estándar Modelo de de El lenguaje programa de Inicialización de 51

Suma Vectores: Creación de objetos de Estándar Modelo de de El lenguaje programa de Inicialización de 52

Suma Vectores: Programa & Kernel Estándar Modelo de de El lenguaje programa de Inicialización de 53

Suma Vectores: Core Sequence Estándar Modelo de de El lenguaje programa de Inicialización de 54

Suma Vectores: Cleanup Estándar Modelo de de El lenguaje programa de Inicialización de 55

Suma Vectores: Salida de consola Estándar Modelo de de El lenguaje programa de Inicialización de 56

Estándar Modelo de de Experimentar con el SDK La especificaión de es muy interesante aunque no todos los vendors la implementan al completo Los foros de Khronos y nvidia son especialmente útiles El lenguaje programa de Inicialización de 57

Estándar Modelo de de El lenguaje programa de Inicialización de 58