• No se han encontrado resultados

Procesamiento de imágenes en GPUs mediante CUDA. I. Introducción. Indice de contenidos

N/A
N/A
Protected

Academic year: 2021

Share "Procesamiento de imágenes en GPUs mediante CUDA. I. Introducción. Indice de contenidos"

Copied!
13
0
0

Texto completo

(1)

Procesamiento de imágenes

en GPUs mediante CUDA

Manuel Ujaldón Martínez

Nvidia CUDA Fellow

Departamento de Arquitectura de Computadores Universidad de Málaga

Indice de contenidos

1. Introducción. [2]

2. La GPU en computación heterogénea. [5]

3. La GPU en computación de altas prestaciones. [7] 4. Procesamiento de imágenes en GPU-CUDA [23]:

1. Herramientas y lenguajes a utilizar. [8]

2. Caracterización de la imagen: Extracción de rasgos. [15]

1. Kernels desarrollados [9] 2. Implementación en CUDA [3]

3. Resultados experimentales y análisis [6] 5. Recomendaciones finales [1]

2

I. Introducción

3

El mercado de los chips gráficos y su peso

en el contexto global de la circuitería para PC

Número total de chips gráficos vendidos en un trimestre:

124 millones el último trimestre de 2011. 138.5 millones el penúltimo trimestre de 2011. 114 millones el último trimestre de 2010.

El mercado de los chips gráficos sigue creciendo, aunque se notan los efectos de la crisis.

Comparado con las ventas de PCs, que fueron de 93.5 millones en el último trimestre de 2011, tenemos 1.5 chips gráficos por cada PC, y este porcentaje del 150% viene creciendo de forma sostenida desde el 115% en 2001.

(2)

En apenas 5 años, la programación CUDA

está muy extendida y plenamente consolidada

Se publican más de 500 artículos científicos cada año. Más de 500 universidades incluyen CUDA en sus cursos. Más de 350 millones de GPUs se programan con CUDA. Más de 120.000 programadores CUDA en activo.

Más de un millón de descargas del compilador y toolkit.

5

II. La GPU en

computación heterogénea

6 3072 cores 16 cores

Utilizar tanto la CPU como la GPU

Cada procesador se encarga de ejecutar aquello en lo que es más eficiente

El eje central de la próxima generación:

Computación heterogénea

7

En lugar de rivalizar, vamos a aprovechar

lo mejor de cada modelo computacional

A favor de la CPU:

!Cachés muy rápidas.

!Buen manejo de las

dependencias de datos y control.

!Muchos paradigmas para

ejecutar hilos y procesos.

!Alto rendimiento sobre un

único hilo de ejecución.

!Mejor cobertura de E/S.

PARALELISMO DE TAREAS

A favor de la GPU:

! Núcleos computacionales muy numerosos.

! Paralelismo masivo.

! Hardware dedicado para

cálculos matemáticos.

! Alto rendimiento ejecutando

tareas paralelas.

! DRAM muy veloz.

PARALELISMO DE DATOS

(3)

La unión CPU-GPU permite lograr

un entorno altamente complementario

Gran ancho de banda en las comunicaciones:

Externas: Superior a 10 GB/s (PCI-express 3).

Internas: Superior a 100 GB/s (memoria de vídeo GDDR5 y anchura de bus en torno a 384 bits, que es como un séxtuple canal en CPU).

9

Operación 1 Operación 2 Operación 3

Init Alloc

Función Lib Lib Función Función

CPU

GPU

Ámbitos de aplicación

del modelo heterogéneo

Oil & Gas Finance Medical Biophysics Numerics Audio Video Imaging

GPU (Computación paralela) Gráficos CPU (Computación secuencial) Computación altamente paralela Control y comunicación Aplicaciones de productividad Aplicaciones intensivas en el acceso a datos 10

Cómo encontrar el punto óptimo de

cooperación en computación heterogénea

11

III. La GPU en computación

de altas prestaciones

(4)

Los supercomputadores más potentes se

construyen mayoritariamente con GPUs

18 de Junio de 2012: 9 de Noviembre de 2011:

13

Y las herramientas de programación están

también a la altura de estas exigencias

Librerías.

Lenguajes y APIs. Debuggers.

Profilers.

Gestión de tareas y recursos.

14

Millones de

investigadores Tarjeta gráfica 5000 dólaresMenos de Miles de investigadores Cientos de investigadores Entre 50.000 y 1.000.000 de dólares Más de un millón de dólares Cluster preconfigurado de servidores Tesla Cluster a gran escala

Existe una plataforma hardware

para cada perfil de usuario...

15 16 Tesla Computación de altas prestaciones Quadro® Gráficos profesionales: Diseño y creación GeForce® Jugones: Ocio y entretenimiento

Todos ellos basados en una misma microarquitectura

Existen tres perfiles de usuario en Nvidia

dentro de la base de la pirámide anterior

(5)

100000 - 1M ! 100x 1x 10000x Cluster tradicional de CPUs Estación de trabajo CPU < 10000 ! Supercomputador personal con GPU

Cluster de nodos Tesla para coprocesamiento

La relación rendimiento/coste

es muy favorable ...

17 Re nd im ie nt o 100 veces más económico Coste 100 veces más potente 100 veces más potente

... y el consumo es más eficiente

18 ! " #! #" $! %&'()*+,*+ -*./0()#!1! 18X mejor ratio en rendimiento/vatio respecto a la CPU 2.8/5.6 GFLOPS 4 MB 2 procesadores 2 chips, 1x2x1 5.6/11.2 GFLOPS 1.0 GB (32 chips 4x4x2) 16 computan, 0-2 E/S 90/180 GFLOPS 16 GB 32 Nodos 2.8/5.6 TFLOPS 512 GB 64 Racks, 64x32x32 180/360 TFLOPS 32 TB El armario (rack) El sistema El nodo

Las placas base

El chip

Cómo se construye

un supercomputador:

BlueGene/L

19

IV. Procesamiento de imágenes

en GPU mediante CUDA

(6)

IV.1 Lenguajes y herramientas

21

Lenguajes y herramientas útiles

para el programador y su evolución

En el contexto de la programación gráfica:

2001: HLSL (programación de shaders - Microsoft). 2003: OpenGL y Cg (C vectorial para shaders - Nvidia). 2006: CUDA (GPGPU para plataformas Nvidia).

2009: OpenCL (GPGPU para todo tipo de plataformas gráficas). 2012: OpenACC (para programadores menos avezados).

En el contexto de la programación paralela de CPUs:

P-threads para las plataformas multi-core. MPI/OpenMP para las plataformas multi-socket.

Veamos cómo se relaciona todo esto basándonos en la programación de nuestras aplicaciones.

22

23

Versiones multicore en CPU y GPU

24

Versiones multinodo

(7)

25

Versiones multicore sobre múltiples nodos

26

Ruta seguida por nuestra primera aplicación:

Extracción de rasgos de una imagen

27

Ruta seguida por nuestra segunda aplicación:

Segmentación y clustering de imágenes

28

Ruta seguida por nuestra tercera aplicación:

Registro y reconstrucción 3D

(8)

IV.2 Caracterización de la

imagen: Extracción de rasgos

29

IV.2.1 Kernels desarrollados

30

Operadores que vamos a implementar

en CUDA para caracterizar imágenes

Conversiones de formato en tratamiento del color.

Utilizar la representación más adecuada según la aplicación.

Operadores en el entorno de vecindad (stencils).

LBP (Local Binary Pattern).

Matrices de co-ocurrencia.

Cálculo de parámetros estadísticos para el análisis de texturas.

Momentos de Legendre y Zernike.

Reconstrucción de imágenes, filtros/convoluciones y análisis de texturas.

31

Conversiones de formato para el color

Se trata de los operadores más afines a la GPU, catalogados como "streaming".

Utilizados para representar con mayor fidelidad el color en el procesamiento de imágenes, como por ejemplo:

Color por adición (luz en monitores): RGB, XYZ. Color por sustracción (tinta en papel): CMYK. Gestión del color: LUV, LA*B*, HSV.

Almacenamiento digital y fotografía: sRGB, JPEG, PNG. Representación de texturas para renderización (bitmaps).

Se requiere una conversión de formato desde el formato origen a otro más apropiado según el ámbito de trabajo de la aplicación.

(9)

Operadores en el entorno de vecindad:

LBP (Local Binary Pattern) (1)

Basado en patrones binarios locales (Ojala, 2002)

Recoge la proporción de micro-rasgos tales como aristas, brillo y puntos oscuros.

Resulta muy utilizado en aplicaciones como el reconocimiento de expresiones faciales.

33

Operadores en el entorno de vecindad:

LBP (Local Binary Pattern) (2)

Es invariante a la rotación de la imagen y a variaciones de intensidad local o global.

Para ello, cada valor obtenido se caracteriza dentro de una de las nueve clases siguientes:

34

Matrices de co-ocurrencia

Ideadas por Haralick (1973).

Histograma de intensidades de pares de píxeles que guardan una determinada relación espacial [dx,dy].

Recoge la variación espacial de intensidades.

Se usa como estructura de datos intermedia para calcular ciertos rasgos: Contraste, correlación, energía, …

Ejemplo para una pequeña imagen con cuatro niveles de intensidad:

35

Variantes para el cálculo de

las matrices de co-ocurrencia

Dependiendo de la aplicación que las utilice:

Se calculan para cada píxel o subimagen a tratar.

Tamaño de ventana a procesar centrada en cada píxel o subimagen: Desde pequeña (4x4) a grande (256x256).

Espacio de color discretizado o completo [0..255].

Calculado para cada canal de color de forma separada o sobre escala de grises de forma conjunta.

Configuración experimental:

Resolución de las imágenes de entrada. Tratamiento hardware: CPU vs GPU.

Estructuras de datos: Matrices densas/dispersas.

(10)

Momentos de Legendre y Zernike

Son filtros definidos en el dominio espacial como una forma directa de capturar las propiedades de una textura.

Los polinomios de Legendre y Zernike representan una imagen mediante un conjunto de descriptores mutuamente independientes.

Los polinomios de Zernike son más exigentes

computacionalmente que los de Legendre, pero también son invariantes a transformaciones lineales (escalado, rotación), siendo más atractivos para procesamiento de imágenes.

37

Momentos de Legendre y Zernike (2)

El momento calculado para una ventana centrada en un píxel puede interpretarse como una convolución de la imagen con una máscara.

Cuanto mayor es el número de momentos, mejor es la reconstrucción.

Las implementaciones existentes en CPU se han

optimizado utilizando algoritmos recursivos, lo que plantea un reto a la GPU debido a las dependencias de datos entre iteraciones de los lazos.

La alternativa de cálculo utilizando métodos directos (vs. iterativos) resulta más rápida en GPU, ya que aunque se

requieren más computos, se explota mucho más paralelismo. 38

39

Ejemplo: Momento de Zernike de orden 0

aplicado al canal rojo de 6 ventanas 64x64

Tejido óseo: ! 166.33 ! 146.91 ! 148.53 Cartílago: ! 231.12 ! 234.75 ! 226.33

IV.2.2. La implementación

en CUDA

40

(11)

41

Las bazas de la GPU para mejorar

implementaciones ya existentes en CPU

! Explotar el paralelismo inherente a la aplicación: Elegir el número de threads óptimo y su despliegue en bloques.

! Utilizar mecanismos específicos para el acceso a memoria en GPU.

!Evitar conflictos en el acceso a bancos de memoria.

!Grandes latencias en el acceso a memoria global, poca capacidad de memoria local y muy cercana a la velocidad del banco de registros.

!Elección de la estructura de datos más adecuada.

! Crear kernels que reutilicen datos.

GPU Multiprocesador N Multiprocesador 2 Multiprocesador 1 Memoria global Memoria compartida Core 1 Regs

Core 2 Regs Core M Regs Caché de texturas 42

Ejemplo de optimización sobre

la jerarquía de memoria de CUDA

Las matrices de co-ocurrencia tienden a concentrar sus elementos en torno a la diagonal principal.

Algunos ejemplos ilustrativos:

Solución: Utilizar matrices dispersas para minimizar el consumo de memoria.

Regeneración ósea según

diferentes tinciones: Diagnóstico del cáncer

43

Implementación mediante matrices dispersas:

Utilizamos el formato coordenado

Ejemplo:

Resulta algo más difícil de acceder que las listas simple o doblemente enlazadas, pero también es más compacto, que es nuestra prioridad aquí.

IV.2.3. Análisis de rendimiento

(12)

45

Procesadores utilizados en la evaluación

experimental de todos estos algoritmos

Parámetro hardware CPU GPU

Modelo comercial Código de referencia Frecuencia de reloj Potencia bruta de cálculo Anchura del bus de memoria Reloj para la memoria Ancho de banda de la memoria Tamaño y tipo de memoria

Intel Core 2 Duo Nvidia GeForce E6400 8800 GTX (G80) 2.13 GHz 575 MHz 10 GFLOPS 520 GFLOPS 64 bits 384 bits 2x333 MHz 2x900 MHz 10.8 GB/sg. 86.4 GB/sg. 2 GB DDR2 768 MB GDDR3 46

Resultados para las conversiones de color

Conversión Tiempo en CPU Tiempo en GPU Aceleración en GPU

RGB to XYZ RGB to Luv RGB to LA*B* RGB to HSV RGB to sRGB sRGB to XYZ sRGB to Luv sRGB to LA*B* 140.01 ms. 1.27 ms. 109.47x 273.83 ms. 1.42 ms. 191.62x 267.92 ms. 2.23 ms. 119.66x 16.60 ms. 0.57 ms. 28.98x 123.51 ms. 1.23 ms. 99.84x 16.50 ms. 0.43 ms. 37.59x 150.31 ms. 0.57 ms. 263.25x 144.41 ms. 1.29 ms. 111.68x 47

Resultados para el operador LBP

Tamaño de

la ventana CPU/C++ GPU/Cg GPU/CUDA Aceleración en GPU

128x128 256x256 512x512 1K x 1K 2K x 2K 3.95 ms. 1.01 ms. 0.07 ms. 54.86 x 17.83 ms. 1.09 ms. 0.14 ms. 127.35 x 76.70 ms. 1.92 ms. 0.41 ms. 184.81 x 310.65 ms. 6.88 ms. 1.56 ms. 198.62 x 1234.96 ms. 23.91 ms. 6.11 ms. 201.98 x

Se consiguen mayores aceleraciones a medida que

aumenta el tamaño de la ventana.

La GPU es más efectiva en ventanas grandes, mientras que CUDA se luce más en tamaños de ventana pequeños.

48

Resultados para las matrices de co-ocurrencia.

Mejoras en GPU y usando matrices dispersas

Tamaño de

la ventana densaCPU/ densaGPU/ dispersaGPU/ % de datos no nulos dispersaMejora GPU/CPU

4x4 8x8 16x16 32x32 64x64 128x128 256x256 1.36 7.61 0.10 0.024% 76.10x 13.60x 2.82 7.62 0.16 0.097% 47.62x 17.62x 2.82 7.58 0.39 0.390% 19.43x 7.23x 3.04 7.63 0.74 1.562% 10.31x 4.10x 3.08 7.76 1.74 6.250% 4.45x 1.77x 2.94 8.54 7.70 25% 1.10x 0.38x 2.96 9.19 46.49 100% 0.19x 0.32x

(13)

49

Resultados para las matrices de co-ocurrencia.

Mejoras según formato de la matriz dispersa

Tamaño de

la ventana coordenadoFormato Listas simplemente enlazadas Listas doblemente enlazadas

4 x 4 8 x 8 16 x 16 32 x 32 64 x 64 128 x 128 256 x 256 0.10 0.13 0.30 0.14 0.25 0.58 0.36 1.02 1.52 0.45 2.31 4.91 1.13 3.46 6.52 6.58 19.85 23.33 43.19 65.99 78.19

La GPU es más efectiva utilizando formatos

sencillos de matrices dispersas. 50

Resultados para los momentos de Zernike

para toda una imagen de 1K x 1K

Momentos

calculados (nº) Método recursivo óptimo en CPU Método directo en GPU Aceleración en GPU

A4,* (3) A8,* (5) A12,* (7) A16,* (9) A20,* (11) 62.5 ms. 19.0 ms. 3.28 x 54.5 ms. 36.6 ms. 1.48 x 62.5 ms. 50.5 ms. 1.23 x 78.0 ms. 68.2 ms. 1.14 x 93.5 ms. 90.0 ms. 1.03 x

Mayores aceleraciones en GPU en los momentos de orden inferior.

51

Síntesis de resultados. Caracterización

de cada algoritmo sobre la GPU

Rasgo a cuantificar Conversiones

de color de vecindadOperadores coocurrenciaMatrices de de ZernikeMomentos

Entrada Salida Canales de color Rango computacional Peso computacional Tipo de operador Reutilización de datos Localidad de acceso Intensidad aritmética Acceso a memoria Aceleración en GPU

Un píxel Ventana 3x3 Subimagen Ventana variable Un píxel Un solo valor Cto. de valores Matriz de tam. var.

Tres Uno Uno Tres

Por píxel Por píxel Por subimagen Por píxel Muy ligero Ligero Pesado Muy pesado Streaming Streaming Recursivo Recurrente Ninguno Bajo Muy alto Alto Ninguna Baja Alta Muy alta

Muy alta Media Alta Baja

Bajo Medio Alto Muy alto

25-250x 50-200x 1-2x 0.7-1x

52

Recomendaciones finales para optimizar

algoritmos en la GPU usando CUDA

Implementar sobre todo algoritmos de computación regular, fuertemente paralelos y aritméticamente intensivos.

Adaptar el algoritmo para expresarlo mediante un número elevado de hilos lo más ligeros posible.

Rediseñar el algoritmo para evitar recursividades y recurrencias.

Pensar en las optimizaciones específicas de CUDA:

Maximizar el ancho de banda: Coalescing y conflictos en bancos. Maximizar el uso del tamaño de memoria compartida disponible.

Referencias

Documento similar

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el

dente: algunas decían que doña Leonor, &#34;con muy grand rescelo e miedo que avía del rey don Pedro que nueva- mente regnaba, e de la reyna doña María, su madre del dicho rey,

Esto viene a corroborar el hecho de que perviva aún hoy en el leonés occidental este diptongo, apesardel gran empuje sufrido porparte de /ue/ que empezó a desplazar a /uo/ a

Después de una descripción muy rápida de la optimización así como los problemas en los sistemas de fabricación, se presenta la integración de dos herramientas existentes

por unidad de tiempo (throughput) en estado estacionario de las transiciones.. de una red de Petri

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

La siguiente y última ampliación en la Sala de Millones fue a finales de los años sesenta cuando Carlos III habilitó la sexta plaza para las ciudades con voto en Cortes de

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de