Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento...

75
Procesamiento Paralelo OpenCL - Introducci ´ on Javier Iparraguirre Universidad Tecnol´ ogica Nacional, Facultad Regional Bah´ ıa Blanca 11 de Abril 461, Bah´ ıa Blanca, Argentina [email protected] http://www.frbb.utn.edu.ar/hpc/ 5 de mayo de 2016

Transcript of Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento...

Page 1: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Procesamiento ParaleloOpenCL - Introduccion

Javier Iparraguirre

Universidad Tecnologica Nacional, Facultad Regional Bahıa Blanca11 de Abril 461, Bahıa Blanca, Argentina

[email protected]

http://www.frbb.utn.edu.ar/hpc/

5 de mayo de 2016

Page 2: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Marco general

Page 3: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

¿Que es OpenCL?

• OpenCL (Open Computing Language)• Estandar para programar plataformas heterogeneas:

CPUs, GPUs, DSPs,• Consta de un lenguaje basado en C99 para armar y una

especificacion de la API• Es soportado por la mayorıa (sino todos) en la industria:

AMD, Intel, NVIDIA, Apple, Android

Page 4: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Caracterısticas

• Codigo portable :)• Se define en cuatro partes

• Modelo de la plataforma• Modelo de ejecucion• Modelo de memoria• Modelo de programacion

Page 5: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Arquitecturas

Page 6: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Una computadora contemporanea

Page 7: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Arquitecuta GPU AMD Radeon 6970

Page 8: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Arquitecuta GPU NVIDIA GTX 580

Page 9: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de la plataforma

Page 10: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de la plataforma

• Una unidad central (host) y varios dispositivos deprocesamiento

• Los dispositivos de de procesamiento se dividen enunidades de procesamiento

• Las unidades de procesamiento se dividen en uno o varioselementos de procesamiento

• Cada elemento de procesamiento tiene su contador deprograma!!!

Page 11: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Quien es quien

• Los host son procesadores de proposito general: x86 osimilares

• Los dispositivos son los procesadores especializados:GPUs o DSPs

• Dependiendo de las implementaciones, los cores puedenser considerados de diversas formas

Page 12: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Seleccionando una plataforma

• Usualmente, esta funcion se llama dos veces• La primera llamada se usa para ver la cantidad de

plataformas disponibles en la implementacion• Luego hacemos espacio para los objetos de la plataforma• En la segunda llamada obtenemos los objetos de la

plataforma

Page 13: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Seleccionando un dispositivo

• Una vez que seleccionamos la plataforma, consultamospor los dispositivos

• Se puede especificar el tipo de dispositivo que estamosbuscando: todos, solo GPUs, solo CPUs

• Usualmente usamos dos veces a esta funcion como elcaso anterior

Page 14: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de ejecucion

Page 15: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Contexto

• Un contexto es un espacio para manejar los objetos yrecursos de OpenCL

• En un programa OpenCL los siguientes conceptos estanasociados a un contexto:

• Dispositivos• Objetos de programa: implementacion de los objetos de

computo• Kernels: Funciones que corren en dispositivos OpenCL (el

codigo de los threads)• Objetos de memoria: los datos operados en el dispositivo

(los datos de los threads)• Colas de comandos: mecanismos de interaccion de

dispositivos (transferencia de datos, ejecucion de kernels ysincronizacion)

Page 16: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Contexto

• Cuando se crea un contexto, el programador provee unalista de dispositivos a asociar

Page 17: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Creando un contexto

• Con esta funcion creamos un contexto, se debe pasar lalista de dispositivos

• cl context properties especifica que plataforma a usar(NULL indica que se usa el provisto por el vendedor pordefecto)

• Se provee un mecanismo de callback para reportar erroresal usuario

Page 18: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Colas de comandos

• La cola de comandos es el mecanismo por el cual elprocesador central (host) le pide una accion a undispositivo (device)

• Hay transferencia de datos a la memoria y ejecucion detarea

• Cada dispositivo tiene su cola de comandos• Los comandos pueden ser sincronicos o asincronicos• Los comandos se pueden ejecutar en orden o no

(out-of-order)

Page 19: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Creando un cola de comandos

• Hay relacion entre la cola de comandos y el contexto• En las propiedades se especifica la ejecucion fuera de

orden y el sensado de desempeno (profilling)

Page 20: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Colas de comandos dentro del contexto

• Las colas de comandos asocian a los dispositivos con elcontexto

Contexto

colacomandos

Page 21: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Objetos de memoria

• Los objetos de memoria es la forma de manejar los datos• Se clasifican en buffers o imagenes• Buffers

• Trozos de memoria contıguos (arreglos, punteros,estructuras)

• Se pueden leer y escribir en ellos• Imagenes

• Objetos 2D o 3D• Solo se acceden como read image() y write image()• Por cada kernel solo se puede leer o escribir

Page 22: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Creando buffers

• Con esta funcion creamos un buffer para un contexto dado• Con los flags especificamos:

• La combinacion de lectura/escritura permitida en los datos• El uso de host pinter para guardar los datos• La copia de los datos desde el host pointer

Page 23: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Objetos de memoria

• Los objetos de memoria estan asociados con un contexto• Deben ser explıcitamente transferidos a los dispositivos

antes de realizar la ejecucion

Contexto

Objetos OpenCL no-inicializados

(se debe transefir los datos)

Page 24: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Transfiriendo datos

• Los comandos para transferir hacia y desde losdispositivos son:

• clEnqueueRead/WriteBuffer/Image• Copiando datos desde el anfitrion (host) al dispositivo

(device) es una escritura• Copiar desde el dispositivo al host es una lectura

• El comando de escritura inicializa el objeto de memoria ylo ubica en un dispositivo

• OpenCL tiene directivas para mapear directamenteobjetos de memoria a un puntero en el host

Page 25: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Transfiriendo datos

• La funcion inicializa el objeto de memoria y escribe losdatos en el dispositivo asociado con la cola de comandos

• El comando va a escribir datos desde un puntero del host(ptr) al dispositivo

• El parametro blocking write especifica si el comandoretorna antes que la transferencia de datos seacompletada

• Los eventos especifica que comandos deben sercompletados antes que este se ejecute

Page 26: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Transfiriendo datos

• Los objetos de memoria se transfieren a los dispositivosespecificando una accion (lectura/escritura) y una cola decomandos

• La especificacion de OpenCL deja abierta la validez deobjetos en multiples dispositivos (depende el proveedor)

Contexto

Las imágenes están en el dispositivo pero son parte del contexto y las ve el host!!

Page 27: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Programas

• En terminos generales, un objeto programa es unacoleccion de Kernels OpenCL

• Puede ser codigo fuente (texto) o un binario compiladopreviamente

• Puede contener datos constantes o funciones auxiliares

• Para crear un objeto programa se requiere leer un archivode texto (codigo fuente) o un binario compilado

• Para compilar son necesarios los siguientesrequerimientos:

• Especificar el dispositivo destino (hay compilacion paracada dispositivo)

• Pasar parametros al compilador (opcional)• Manejar errores de compilacion (opcional)

Page 28: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Programas

• Un objeto de programa es creado y compilado cuando seprovee los fuentes o un binario

Contexto

Objeto programa

Page 29: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Creando un programa

• La funcion crea un objeto programa usando un archivo detexto conteniendo fuentes

• count especifica la cantidad de lıneas en el archivo fuente• El programador debe crear una funcion para leer el codigo

• Si nos las cadenas de caracteres no terminan en NULL,los campos lengths especifican los largos

Page 30: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Compilando un programa

• Esta funcion compila y linkea un ejecutable desde el objetoprograma a cada dispositivo en el ambiente

• En caso de proveer una lista de dispositivos, solo se envıael ejecutable a los dispositivos en la lista

• El el argumento opcional se puede especificarpreprocesador y optimizaciones entre otros

Page 31: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Reportando errores de compilacion

• Si hay un error de compilacion, OpenCL requiere que elprogramador adquiera la salida del compilador

• El error se determina por el valor de error retornado porclBuildProgram()

• Para obtener el mensaje como una cadena de caracteresse debe llamar a clGetProgramBuildInfo() con el objetoprograma y el parametro CL PROGRAM BUILD STATUS

Page 32: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Kernels

• Un kernel es una funcion declarada en un programa quees ejecutada en un dispositivo OpenCL

• Un objeto kernel esta compuesto por la funcion y losargumentos asociados

• Un objeto kernel es creado desde un programa compilado• El programa debe asociar explıcitamente argumentos

(objetos de memoria y primitivas entre otras) con el objetokernel

Page 33: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Kernels

• El objeto kernel es creado por el objeto programa

Contexto

Objeto kernel

Page 34: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Creando un Kernel

• Esta funcion crea un kernel a partir de un objeto programadado

• El objeto kernel creado es especificado por una cadena decaracteres que coincide con el nombre de la funciondentro del programa

Page 35: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Compilacion en tiempo de ejecucion

• Es costoso compilar programas y crear kernels en tiempode ejecucion

• Lo ideal es hacer estas operaciones una sola vez alcomienzo del programa

• Los objetos kernel pueden ser reusados con diferentesargumentos de entrada

cargar código fuenteen un arreglo clCreateProgramWithSource

clCreateProgramWithBinary

clBuildProgramm clCreatekernel

Page 36: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Definiendo argumentos del kernel

• Se debe llamar la funcion clSetKernelArgs• Se debe especificar el ındice del argumento como aparece

en la funcion, el tamano y el puntero a los datos

Page 37: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Ejemplos argumentos del kernel

/ / pr imer ejemploc lSetKerne lArg ( kernel , 0 , s i z e o f ( cl mem ) ,

( vo id ∗)& d i Image ) ;

/ / segundo ejemploc lSetKerne lArg ( kernel , 1 , s i z e o f ( i n t ) , ( vo id ∗)&a ) ;

Page 38: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Imagenes como argumentos de kernels

• Los objetos de memoria y datos individuales pueden sepasados como argumentos de kernels

Contexto

argumentos de kernel

Page 39: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

• En los programas masivamente paralelos cada threadcomputa una parte del problema

• En el caso de una suma de vectores, cada thread va asumar un elemento del arreglo

• Si lo pensamos de una manera visual, los threads se van aordenar en la misma forma que los datos

Page 40: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

• Hagamos una suma simple de vectores de 16 elementosC=A+B

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

A

+

B

=

C

índices vectores

suma vectores

Page 41: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

• Creamos una estructura de threads 1D para resolver elproblema

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

A

+

B

=

C

threads

suma vectores

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Page 42: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

• Cada thread suma un componente del vector

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

A

+

B

=

C

threads

suma vectores

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Page 43: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

• La estructura de threads esta disenada para ser escalable• Cada instancia de un kernel es llamada un ıtem de trabajo

(puede ser thread)• Los ıtems de trabajo se organizan en grupos de trabajo• Los grupos de trabajo son independientes entre si (esto

permite escalar)• Un espacio de ındices define una jerarquıa grupos de

trabajo e ıtems de trabajo

Page 44: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

Page 45: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Estructura de threads

• OpenCL permite identificar a los threads en si mismo y asus datos

• Los threads pueden determinar el ID global en cadadimension

• get global id(dim)• get global size(dim)

• Los threads pueden determinar el ID del grupo de trabajoy el ID dentro del grupo

• get group id(dim)• get num groups(dim)• get local id(dim)• get local size(dim)

• get global id(0) = column, get global id(1) = row• get num groups(0) * get local size(0) == get global size(0)

Page 46: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de memoria

Page 47: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de Memoria

• OpenCL define varios tipos de memoria• Esta muy relacionada con la arquitectura del hardware

• Memoria global: accesible a todos los ıtems de trabajo• Memoria constante: solo lectura y global• Memoria local: local a el grupo de trabajo• Memoria privada: privada a un ıtem de trabajo

Page 48: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de memoria

Page 49: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de Memoria

• El manejo de memoria es explicito• Se debe mover datos desde el host al dispositivo• Dentro del dispositivo hay que mover los datos desde la

memoria global a la local• Los grupos de trabajo son asignados a ejecutar sobre

unidades de computo• No hay garantıa de coherencia de datos entre dos grupos

de trabajo (no hay mecanismo de software en laespecificacion de openCL)

Page 50: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Escribiendo un kernel

• Una instancia de kernel es creada por cada thread• Los kernels tienen las siguientes caracterısticas:

• Deben comenzar con la palabra clave kernel• Deben tener tipo de retorno void• Debe declarar el espacio de memoria para cada argumento

que es un objeto de memoria (ahora lo vemos)• Debe usar las funciones de la API (por ejemplo

get global id()) para determinar sobre que datos que cadathread va a trabajar

Page 51: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Identificadores de espacios de memoria

• kernel toma memoria desde el espacio global dememoria

• constant un tipo especial de memoria solo lectura• local memoria compartida por el grupo de trabajo• private privado a cada ıtem de trabajo• read only read only usado en imagenes• Los argumentos del kernel que son objetos de memoria

deben ser globales, locales o constantes

Page 52: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Ejemplo de kernel

• Suma simple de dos vectores

k e r n e l

vo id sumaVectores ( g l o b a l i n t ∗ A,g l o b a l i n t ∗ B,g l o b a l i n t ∗ C) {

i n t t i d = g e t g l o b a l i d ( 0 ) ;C[ t i d ] = A [ t i d ] + B [ t i d ] ;

}

Page 53: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de ejecucion

Page 54: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Ejecutando el kernel

• Se necesita definir las dimensiones del espacio de ındicesy los tamanos de los grupos de trabajo

• Los kernels se ejecutan asinconicamente• clEnqueueNDRangeKernel lo agrega a la cola de

ejecucion, no garantiza el momento de comienzo

Page 55: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Ejecutando el kernel

• La estructura de los threads es definida por el espacio deındices que es creado

• Cada thread ejecuta el mismo kernel sobre una partediferente de los datos

Contexto

se crea un espacio de índices relacionadoa las dimensionesde los datos

Page 56: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Ejecutando el kernel

• La estructura de los threads es definida por el espacio deındices que es creado

• Cada thread ejecuta el mismo kernel sobre una partediferente de los datos

Contexto

se crea un espacio de índices relacionadoa las dimensionesde los datos

Page 57: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Ejecutando el kernel

• La funcion le dice al dispositivo asociado con una cola decomandos que comience a ejecutar el kernel

• El espacio global debe ser especificado y el tamano de losgrupos de trabajo local es opcional

• Se puede proveer una lista de eventos que debencumplirse antes que la operacion se ejecute

Page 58: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Copiando datos al anfitrion

• El ultimo paso es copiar los datos desde el dispositivo alCPU

• Similar a la escritura de datos, pero en este caso haytransferencia del dispositivo al CPU

Page 59: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Copiando datos al anfitrion

Contexto

Page 60: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Liberando recursos

• La matorıa de los objetos OpenCL son deben serliberados luego de ser usados

• Hay una funcion clRelease{Recurso} para la mayorıa delos tipos OpenCL

• Algunos ejemplos son clReleaseProgramm() oclReleaseMemObject()

Page 61: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Verificado errores

• Los comandos OpenCL retornan errores como enterosnegativos

• El valor cero significa ejecucion exitosa CL SUCCESS• Una breve lista de errores:

• -1 CL DEVICE NOT FOUND• -2 CL DEVICE NOT AVAILABLE• -3 CL COMPILER NOT AVAILABLE• -4 CL MEM OBJECT ALLOCATION FAILURE• -5 CL OUT OF RESOURCES

Page 62: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Todo en una foto

Page 63: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Modelo de programacion

• Paralelismo de datos• Mapeo uno-a-uno entre ıtems de trabajo y elementos en

objetos de memoria• Los grupos de trabajo pueden ser definidos explıcitamente

o implıcitamente (se definen los ıtems de trabajo y OpenCLcrea los grupos de trabajo)

• Paralelismo de tareas• El kernel es ejecutado independientemente del espacio de

ındices• Otras formas de paralelismo: enviar a la cola tareas

multiples, usar tipos de vectores especıficos para algundispositivo particular

• Sinconizacion• Es posible entre ıtems en un grupo de trabajo• Es posible entre comandos en una cola de comandos del

mismo contexto

Page 64: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Resumiendo

• OpenCL provee herramientas para operar entre el CPU yGPU

• Se necesita crear un contexto para contener toda lainformacion y datos requeridos en un programa OpenCL

• Se crean objetos de memoria para moverlos hacia y desdelos dispositivos

• Los programas y los kernels contienen el codigo que losdispositivos ejecutan

Page 65: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Compilando

Page 66: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Compilando el primer programa

# Compilando :gcc − I / usr / i nc lude /CL / −lOpenCL \−o a p p l i c a t i o n Vec to rAdd i t i on . cpp

# Ejecutando :. / a p p l i c a t i o n

Page 67: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

En detalle

jav ier@orca : ˜ / Downloads / lec02 03 code$ l lt o t a l 16−rw−r−−r−− 1 j a v i e r j a v i e r 176 Jan 17 2011 vectoradd . c l−rw−r−−r−− 1 j a v i e r j a v i e r 10092 Jan 17 2011 Vec to rAdd i t i on . cppjavier@orca : ˜ / Downloads / lec02 03 code$ gcc −I / usr / i nc lude /CL / −lOpenCL −o f i r s t −a p p l i c a t i o n−openCL Vec to rAdd i t i on . cppjavier@orca : ˜ / Downloads / lec02 03 code$ l lt o t a l 32−rwxr−xr−x 1 j a v i e r j a v i e r 12751 Oct 13 15:32 f i r s t −a p p l i c a t i o n−openCL−rw−r−−r−− 1 j a v i e r j a v i e r 176 Jan 17 2011 vectoradd . c l−rw−r−−r−− 1 j a v i e r j a v i e r 10092 Jan 17 2011 Vec to rAdd i t i on . cppjavier@orca : ˜ / Downloads / lec02 03 code$ . / f i r s t −a p p l i c a t i o n−openCLRunning Vector Add i t i on program

1 p la t fo rms detectedPla t fo rm 0:

Vendor : NVIDIA Corporat ionName: NVIDIA CUDA

1 devices detectedDevice 0 :

Device : NVIDIA Corporat ionName: GeForce GTS 450

No b u i l d e r r o r sOutput i s c o r r e c tjav ier@orca : ˜ / Downloads / lec02 03 code$

Page 68: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Profiling

Page 69: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

NVIDIA Visual Profiler

• En Linux se ejecuta como nvvp

Page 70: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Comienzo

Page 71: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Profiler

Page 72: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Contacto

Page 73: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

¡Muchas gracias!

¿[email protected]

Page 74: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

Referencias

Page 75: Procesamiento Paralelo - OpenCL - Introducción procesamiento Los dispositivos de de procesamiento se dividen en unidades de procesamiento Las unidades de procesamiento se dividen

• A. Munshi, B. Gaster, T. G. Mattson, J. Fung, D. Ginsburg,“OpenCL Programming Guide”, Addison-WesleyProfessional, 2011.

• B. Gaster, L. Howes, D. R. Kaeli, P. Mistry, D. Schaa,“Heterogeneous Computing with OpenCL”, MorganKaufmann, 2011.

• AMD OpenCL University Kit• NVIDIA CUDA Toolkit