Arquitectura de GPUs

Documentos relacionados
Memorias, opciones del compilador y otras yerbas. Clase 3

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

Arquitectura de aceleradores. Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC

Modelo de aplicaciones CUDA

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

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

High Performance Computing y Big Data en AWS. +info: ( HPC y Big Data en AWS 16 Abril, / 14

Familia de procesadores Intel x86

Arquitecturas GPU v. 2013

Organización de Computadoras. Turno Recursantes Clase 8

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

Sistemas Operativos. Curso 2016 Procesos

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS

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

PROBLEMAS DE FUNDAMENTOS DE TECNOLOGÍA DE COMPUTADORES T5. MEMORIAS

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

Catedrático: Alumna:

Arquitectura Segmentada: Conceptos básicosb

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

Capítulo 4 Gestión de memoria

Tema 5 Repertorios de instrucciones: Modos de direccionamiento y formato

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

Es un software de simulación que ejecuta programas en lenguaje de ensamblador para procesadores con arquitectura MIPS32.

TALLER DE CONOCIMIENTOS APRENDICES JORGE LEONARDO MAZA CARLOS DAVID ZAMBRANO JOSE G. RODRIGUEZ PROFESOR RONALD MARTELO

Introducción a Computación

Fundamentos de los Sistemas Operativos (GII) Examen Final 15 de Junio de SEGUNDA PARTE - SOLUCIONES

Memoria La memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos).

Arquitectura de Computadores II Clase #16

Múltiples GPU (y otras chauchas)

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS

Heterogénea y Jerárquica

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

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

Intel Tera-Scale Computing Alumno: Roberto Rodriguez Alcala

PIPELINING: Antes de adentrarnos en el tema, veremos una analogía de un pipeline:

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

Tema: Historia de los Microprocesadores

Arquitectura de Computadores

TEMA 4: SISTEMAS MULTIPROCESADOR (MEMORIA COMPARTIDA) BLOQUE 2 Arquitecturas de computación paralela

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

Laboratorio de Herramientas Computacionales

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

Sistemas Operativos. Curso 2014 Planificación

Sistemas operativos. Tema 7: Gestión n de memoria

Resolución de problemas en paralelo

Sistemas Operativos. Curso 2015 Planificación

... partes internas del computador!...

Arquitectura de Computadores

Computación en procesadores gráficos

Conclusiones. Particionado Consciente de los Datos

SEMINARIO PRÁCTICO Cómo elegir el sistema de cálculo científico ideal para mi investigación. Raúl Díaz

Oferta de Trabajos en Grupo. Arquitectura y Tecnología de Computadores

Arquitecturas GPU v. 2015

INTRODUCCIÓN. Que es un sistema operativo? - Es un programa. - Funciona como intermediario entre el usuario y los programas y el hardware

Sin embargo, la realidad es otra: Las memorias grandes son lentas Las memorias rápidas son pequeñas (y caras)

Introducción HPC. Curso: Modelización y simulación matemática de sistemas. Esteban E. Mocskos (emocskos@dc.uba.ar) Escuela Complutense Latinoamericana

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

Unidad II: Administración de Procesos y del procesador

Procesos, hilos y Recursos

Capitulo V Administración de memoria

colegio de bachilleres de Chiapas plantel 56 catedrático: Jorge Roberto Nery Gonzales materia: hojas de calculo

Tema 7: Esquema del Funcionamiento de una Computadora. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Arquitectura de el Hp Superdome INTEGRANTES: Islas Islas Roberto A. Ortiz Flores Enrique A. Rico Vázquez Alejandro. Sistemas Operativos Avanzados

DataMAX pa r a PS3. Manual del Usuario V1.0

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

Evaluación del rendimiento de procesadores Intel Nehalem. Modelos x7550, x5670 y x5570

Solving Dense Linear Systems on Platforms with Multiple Hardware Accelerators

Mendieta. Carlos Bederián IFEG-CONICET, FaMAF-UNC WHPC13

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

Procesos. Planificación del Procesador.

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

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

Pipelining o Segmentación de Instrucciones

El soporte del sistema operativo. Hace que un computador sea más fácil de usar. Permite que los recursos del computador se aprovechen mejor.

3.8 Construcción de una ALU básica

Organizacion del Computador

MICROPROCESADORES. Conrado Perea

UNIDAD I Introducción. M.C. Juan Carlos Olivares Rojas

Tema 2: El hardware del servidor Profesor: Julio Gómez López

Plataformas de soporte computacional: arquitecturas avanzadas,

Dispositivos de Red Hub Switch

Unidad VI: Supervisión y Revisión del proyecto

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

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Arquitectura basica de un computador

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

Arquitectura de Computadores II Clase #6

CONTESTACIÓN CONSULTA PÚBLICA SOBRE EL MODELO DE GESTIÓN DE LAS BANDAS DE FRECUENCIAS DE a 1492 MHZ y 3,6 A 3,8 GHZ.

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

Sistemas Operativos II Febrero 2009 Nombre:

Examen de Arquitectura de Computadores

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

CÓMO TRABAJA TU SISTEMA OPERATIVO?

Aspel-PROD 3.0 Aspel-PROD 3.0 SAE 6.0 SAE 6.0

HARDWARE DE UN ORDENADOR. Elementos básicos

ISA (Instruction Set Architecture) Arquitectura del conjunto de instrucciones

Unidad de disco duro frente a Kingston SSDNow V+ 200 Series 240GB: prueba comparativa...1

INTRODUCCIÓN. Definiciones ORDENADOR (RAE 1992): En esta asignatura computador y ordenador tiene el mismo significado

Sistemas de Operación II

Unidad Orientativa (Electrónica) Amplificadores Operacionales

Transcripción:

Arquitectura de GPUs Carlos Bederián, Nicolás Wolovick FaMAF, Universidad Nacional de Córdoba, Argentina 1 de Agosto de 2012 ECAR12@DC.UBA Revisión 3739, 2012-08-02

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

CPU modernas, cómputo Por ejemplo Intel Sandy Bridge TM o AMD Bulldozer TM. ILP Pipelining con una docena de fases. Ejecución fuera de órden (OOE). Un scheduler que entiende X86 64 y analiza dependencia de datos. Superescalares. Muchas unidades de ejecución.. 3 puertos cómputo, 3 puertos memoria, para Sandy Bridge. Predictor de saltos. Análisis estadístico realtime para evitar costosos pipeline stalls. Dos juegos de registros para correr dos hilos y aumentar la utilización de las unidades de ejecución. Intel Hyperthreading TM. FPU Unidades independientes de multiplicación y suma. 1 MAD o sea 2 FLOP por ciclo. Unidades vectoriales AVX, 8 fp32 a la vez. 8 2 FLOP por ciclo.

Acceso a memoria principal CPU modernas, memoria Mejorando mucho el BW a memoria. Acceso multibanco. Ej: Nehalem 3, Sandy Bridge 4, Ivy Bridge 2 (por ahora). Cache Estructura de 3 niveles: L1I y L1D, L2, L3. L3 compartida entre los cores de la pastilla. TLB multinivel. Unidad de prefetching de caché. Way prediction & semantic aware cache.

CPU vs GPU, números crudos Performance pico teórica. Xeon E5-2680 M2090 FLOPS fp32 172.8 GFLOPS 1331 GFLOPS FLOPS fp64 86.4 GFLOPS 665 GFLOPS MemBW 51.2 GBps 177 GBps TPD 130 W 225 W 1 TC 2.26e9 3.0e9 Die 416 mm 2 520 mm 2 Availability Q1 12 Q2 11 Cómo se hace semejante façanha? 1 Placa entera, con memoria, ventiladores, etc.

CPU vs GPU, números crudos Performance pico teórica. Xeon E5-2680 M2090 FLOPS fp32 172.8 GFLOPS 1331 GFLOPS FLOPS fp64 86.4 GFLOPS 665 GFLOPS MemBW 51.2 GBps 177 GBps TPD 130 W 225 W 1 TC 2.26e9 3.0e9 Die 416 mm 2 520 mm 2 Availability Q1 12 Q2 11 Cómo se hace semejante façanha? Elegir otras soluciones de compromiso. 1 Placa entera, con memoria, ventiladores, etc.

Xeon E5 floorplan Die Core The Free Lunch Is Over Demasiada superficie y potencia para: Descubrir paralelismo ILP. Mitigar el memory wall Cache.

Hay otras soluciones de compromiso. Xeon E5 floorplan Die Core The Free Lunch Is Over Demasiada superficie y potencia para: Descubrir paralelismo ILP. Mitigar el memory wall Cache.

Fermi floorplan Die Core

CPU vs. GPU Esquemáticamente la diferencia es: Achicar area de control y caché, aumentar número de ALUs. Pero... 1. Cómo extraigo el paralelismo para alimentar a tantas ALUs? 2. Cómo evito la latencia a memoria?

Cómo extraigo el paralelismo para alimentar a tantas ALUs? Respuesta: paralelismo masivo. En una GPU podemos tener, por ejemplo, 512 cores. Para alimentar este paralelismo masivo se necesita paralelismo de datos.

Cómo evito la latencia a memoria? Respuesta: paralelismo masivo. Sobre-vender la capacidad física. Cualquier operación que demore (latencia): Cambio de contexto a otro hilo que pueda progresar. Suficiente paralelismo puede ocultar la latencia. No solo latencia de memoria, también de operaciones. Notar que la latencia de operaciones y memoria sigue presente. Solo se superpone con otros cálculos.

Cómo evito la latencia a memoria? Respuesta: paralelismo masivo. Sobre-vender la capacidad física. Cualquier operación que demore (latencia): Cambio de contexto a otro hilo que pueda progresar. Suficiente paralelismo puede ocultar la latencia. No solo latencia de memoria, también de operaciones. Notar que la latencia de operaciones y memoria sigue presente. Solo se superpone con otros cálculos. Highly parallel & throughput computing

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

Cores muy simples Execution context es donde se guarda el estado: PC, registros.

Muchos cores muy simples

Cores vectoriales simples Amortizar aún más el área: vector processor.

Foto final. Muchos cores vectoriales simples

Recordar el origen: realtime 3D rendering Graphic pipeline.

Como se procesan los vertex y fragments Graphic pipeline: highly parallel load.

Procesadores vectoriales, la otra solución Vectorizar es complejo. Programar SSE/AltiVec/NEON/ XeonPhi? es un problema. SIMD en hardware, no implica SIMD en software Simular flujos de control independientes. Cómo? internal masks, branch sincronization stack, instruction markers. Ilusión que cada lane en un warp tiene su propio PC.

Divergencia en el flujo de control

La latencia total es la misma, pero se superpone con otros cálculos. Ocultamiento de latencia

Muchos hilos volando, muchas cosas para recordar Más ocultamiento latencia mem& ops Más hilos en ejecución Más memoria para sus contextos Tensión entre: Ocultamiento de latencia. Tamaño de la memoria para almacenar contextos.

Muchos hilos volando, muchas cosas para recordar Más ocultamiento latencia mem& ops Más hilos en ejecución Más memoria para sus contextos Tensión entre: Ocultamiento de latencia. Tamaño de la memoria para almacenar contextos. Verdad de Pedro Grullo La memoria es finita y de tamaño constante. Corolario Kernels con contextos pequeños ocultan mejor la latencia que kernels con contextos grandes.

Contextos pequeños. Máximo ocultamiento de latencia Cada kernel utiliza unos pocos registros.

Contextos intermedios. Mediano ocultamiento de latencia

Contextos grandes. Poco ocultamiento de latencia La cantidad de registros es un parámetro crucial en la performance.

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

Problema de planificación Como ejecutar grilla de bloques de hilos en cores vectoriales.

Warp Planificación de Warp y Bloque Mínima unidad de planificación. Procesamiento SIMD. (pero) Flujo de control independiente en cada hilo. Típicamente 16 hilos, 32 hilos (warp) o 64 hilos (wavefront). Bloque Es un multiprocesador virtual Hilos independientes, memoria compartida. Puede haber comunicación y sincronización intra-bloque. Los bloques son independientes entre si. Un bloque comienza y no para hasta completar su programa. Non-preemptive scheduler. Un bloque se ejecuta en solo un procesador vectorial. Un procesador vectorial puede ejecutar más de un bloque.

Planificación de dos niveles Warps dentro de un bloque (Warp Scheduler) Todos los warps de bloques en un vector core van rotando. Ctxt switch cuando hay latencia de mem&ops. Hecho en hardware: free ctxt switch. Hecho en hardware: ĺımites duros en #warps y #bloques. Bloques dentro de una grilla (GigaThread TM Engine) Planificador batch (cola de bloques esperando procesamiento). Asigna una cantidad de bloques a cada vector core. Limitaciones: #warps y #bloques que maneja el warp scheduler. #registros: tiene que entrar en el contexto del vector core. Todos estos parámetros se fijan en tiempo de compilación. Solo parametriza el código con blockidx y threadidx!

Repensar algunas características de CUDA Tiempo de vida de cada nivel de la jerarquía de memoria. Falta de sincronización global entre bloques. Throughput computing! Clave: entender como funciona el planificador de dos niveles.

Automatic Scalability Dada una aplicación dividida en muchos bloques independientes, es fácil (para el vendor) ofrecer escalablidad! El fabricante vende #vector cores según el bolsillo del cliente.

occupancy = Occupancy #threads per vector core #max threads per vector core Solo una primerísima aproximación de la eficiencia del código. Definido en tiempo de compilación: registros. tamaño de la grilla y el bloque. Se informa a través de CUDA PROFILE=1. Ejemplo Bloques del máximo de hilos, el kernel ocupa pocos registros, la máxima cantidad de hilos que maneja el vector core es 48 32. occupancy = 1024 1536 = 0.66

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

Organización de la memoria de una CPU moderna

Organización de la memoria de una GPU

Organización de la memoria de una GPU moderna

Ancho de banda, latencias y tamaños totales Ancho de banda y latencias Nivel BW Latencia Registros 8.1 TB/s 1 ciclo Shared 1.3 TB/s 6? ciclos Global 177 GB/s 400 ciclos Vasily Volkov, Better Performance at Lower Occupancy, GTC 2010. Pirámide invertida de memoria Nivel Registros Caché L1 / Shared Caché L2 Tamaño total 2 MB 0.25 MB / 0.75 MB 0.75 MB

Registros Más limitaciones al paralelismo: registros Tienen que entrar en el contexto. #regs per kernel #threads per vector core context size Hay ĺımites a la cantidad de registros por thread. Si un kernel pasa este ĺımite: register spilling. O por opción del compilador: -maxrregcount. O por el calificador launch bounds () de los kernels. Register spilling Registros guardados en local memory. Es básicamente memoria global. Evitarlo!

Más limitaciones al paralelismo: memoria compartida Tienen que entrar en la shared del vector core. shared per block #blocks per vector core shared size No hay nada parecido a shared spilling. La memoria compartida se puede configurar. También se puede pedir memoria shared dinámicamente. kernel<<<grid size, block size, shared size>>>().

Warps y accesos a memoria global El sistema de memoria junta los pedidos de memoria del warp. Trae tantas ĺıneas de caché L1 (128 bytes) como sea necesario.

Warps y accesos a memoria global El sistema de memoria junta los pedidos de memoria del warp. Trae tantas ĺıneas de caché L1 (128 bytes) como sea necesario. El caso ideal Ejemplo: el típico a[tid] = 1.0f, donde tid es el identificador de hilo lineal. Son 32 hilos, accediendo cada uno a 4 bytes (1 float): 128 bytes. La memoria de cudamalloc está alineada a 256 bytes.

Warps y accesos a memoria global El sistema de memoria junta los pedidos de memoria del warp. Trae tantas ĺıneas de caché L1 (128 bytes) como sea necesario. El caso ideal Ejemplo: el típico a[tid] = 1.0f, donde tid es el identificador de hilo lineal. Son 32 hilos, accediendo cada uno a 4 bytes (1 float): 128 bytes. La memoria de cudamalloc está alineada a 256 bytes. No cambia nada si se pierde secuencialidad

Accesos desalineados pero secuenciales Se realizan dos pedidos de 128 bytes. Se desperdicia parte del ancho de banda. Deshabilitar la L1 puede ayudar La cache L2 tiene ĺıneas de 32 bytes. Comparar:

Organización Warps y accesos a memoria compartida Dividia en 32 bancos interleaved en palabras de 32 bits. Cada thread en un warp puede leer en paralelo de un banco distinto. Si más de un hilo lee la misma palabra de 32 bits de un banco, el resultado se difunde. Acceso ideal shared float shared[shared]; float data = shared[threadidx.x]; Conflicto de bancos Dos hilos dentro de un warp acceden a distintas palabras de 32 bits en el mismo banco. Los hilos en conflicto se serializan.

Conflicto de bancos en la memoria compartida 1 Izq. Todo bonito, todo ordenadito. Cen. Stride de 2, 2 palabras distintas de 32 bits en el mismo banco. 2-way-conflict. Der. Stride de 3. coprime(32, 3). No hay conflicto.

Conflicto de bancos en la memoria compartida 2 Izq. Permutación. Sin conflictos. Cen. Threads 3, 4, 6, 7, 9 acceden a la misma palabra del mismo banco. No hay conflictos. Se difunde el valor. Der. Idem al anterior, pero más masivo.

Para qué sirve la cache L1 y L2 No es una cache como en la CPU. No implementa poĺıticas de reemplazo para temporal locality. Es útil para: Patrones de acceso a memoria ligeramente desalineados. Register spilling, stack frames, function call. En general suaviza las rugosidades de la jerarquía de memoria.

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

La placa

Fermi Streaming Multiprocessor y Core

Características, SM (vector cores) 16 Streaming Multiprocessors. Cada uno con: 32 cores int32. 32 cores fp32 ó 16 cores fp64. Relación fp64/fp32 = 1/2. 4 SFU (special function units): sqrt, cos, etc. 16 LD/ST units, para calcular direccionamientos. 2 warp schedulers. Warp scheduler: 48 warps, 8 bloques. Hasta 16 48 32 = 24576 hilos concurrentes. 32768 registros!, hasta 64 por thread, granularidad de 2. Performance Pico fp32 fp64 16SM 32cores 2FLOP/clock 1.15GHz = 1177.6GFLOPS 16SM 16cores 2FLOP/clock 1.15GHz = 588.8GFLOPS

Características, SM (vector cores) PTX 2.0 ISA Atomics para fp32, int64 (además rápidas). Operaciones intra-warp: ballot, any, all. 64-bit addressing, UVA (unified virtual addressing). IEEE 754-2008 para fp32, fp64. FMA en vez de MAD para mayor precisión. Instrucciones predicadas (ARM-like). SIMD Video Instructions (vector-ops dentro de un vector core!)

Streaming multiprocessor Características, memoria 128 KB register file. 64 KB de RAM (16/48-48/16 de L1/shared). Memoria global Cache L2, 0.75GB, compartido por todos los SMs. 6 GB GDDR5 a 1.85 GHz. Opción de ECC. 6 bancos de 64 bits. 384 bits de ancho. Hay una TLB al medio. Ancho de banda de memoria pico 1.85GHz (384/8) 2/2 30 = 165.4GiB/sec

Streaming multiprocessor Características, memoria 128 KB register file. 64 KB de RAM (16/48-48/16 de L1/shared). Memoria global Cache L2, 0.75GB, compartido por todos los SMs. 6 GB GDDR5 a 1.85 GHz. Opción de ECC. 6 bancos de 64 bits. 384 bits de ancho. Hay una TLB al medio. Ancho de banda de memoria pico 1.85GHz (384/8) 2/10 9 = 177.6GB/sec

Planificador de bloques: GigaThread TM Permite ejecución concurrente de varios ( 16) kernels. Objetivo: aumentar la utilización de la GPU.

Compute Capability Las capacidades de la arquitectura están representadas por la CC. La M2090 es CC 2.0. Cambios más importantes en las CC: 1.0 (G80) se define la estructura de bloques, y la shared. Sin doble precisión, sin atomics. 1.1 (G86) atomics. 1.2 (GT216) atomics en shared. 1.3 (GT200) doble precisión, warp vote, 3D grids. 2.0 (GF100) atomics para fp32, predicated synchthreads, surfaces, printf, assert. 2.1 (GF104) 3 half-warp core groups (48), ILP. 3.0 (GK104) blockidx.x 2 31 1, shared vs. L1 más configurable, ILP. 3.5 (GK110) 255 registros por hilo, paralelismo dinámico.

Típica tabla de CC

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

VectorSum Compilemos pidiendo información al PTX Assembler ptxas. nicolasw@mini:~/ecar12/clase1/vectorsum$ make nvcc -O3 -arch=sm_20 --ptxas-options=-v -I/opt/cudasdk/C/common/inc -o vectorsum.o -c vectorsum.cu ptxas info : Compiling entry function _Z9vectorsumPfS_ for sm_20 ptxas info : Function properties for _Z9vectorsumPfS_ 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads ptxas info : Used 6 registers, 4+0 bytes smem, 48 bytes cmem[0], 24 bytes cmem[2] ptxas info : Compiling entry function _Z3setPfS_ for sm_20 ptxas info : Function properties for _Z3setPfS_ 32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads ptxas info : Used 14 registers, 48 bytes cmem[0], 24 bytes cmem[2], 44 bytes cmem[16] nvcc -O3 -arch=sm_20 --ptxas-options=-v -I/opt/cudasdk/C/common/inc -o vectorsum vectorsum.o vectorsum 6 registros por hilo No puede saturar un SM: 6 1536 32768. 4 bytes de memoria compartida por bloque. Muy por debajo de la capacidad de un SM: 8 4 49152. No siempre es asi, este es un toy example. Notar que set es mucho más complejo!

VectorSum, configuración de ejecución y planificación Tamaño de bloques y como se distribuyen en los SM. Block BlocksPerSM ThreadsPerSM Occupancy LimitedBy 64 8 512 128 8 1024 192 8 1536 256 6 1536 512 3 1536 1024 1 1024 512 = 0.33 MaxBlocksPerSM 1536 1024 = 0.66 MaxBlocksPerSM 1536 1536 = 1.0 Max{Blocks,Threads}PerSM 1536 1536 = 1.0 MaxThreadsPerSM 1536 1536 = 1.0 MaxThreadsPerSM 1536 1024 = 0.66 MaxThreadsPerBlock 1536

Introducción Organización GPU: cálculo y paralelismo Organización de GPU: scheduling Organización GPU: memoria NVIDIA GF110 Tesla M2090 Poniento todo junto Resumen

Resumen CPUs vs. GPUs. Ideas centrales de GPU Computing. Procesadores vectoriales, procesamiento escalar. Latency hiding. Concurrencia vs. memoria. Planificación de <<<grid,block>>> en los SM. Forma de trabajo de los niveles de la jerarquía de memoria. Un ejemplo: NVIDIA Tesla M2090. Un ejemplo: vectorsum.

Lo que sigue Descanso. Como, a partir de esta montaña de información, hacer que nuestros programas funcionen más rápido.