diapositivas curso opencl
Post on 18-Feb-2018
230 Views
Preview:
TRANSCRIPT
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 1/52
¿Que es computo
paralelo?
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 2/52
Cómputo serial
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 3/52
Cómputo paralelo
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 4/52
CPU vs GPU
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 5/52
Diferencia entre CPU y GPU
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 6/52
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 7/52
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 8/52
CPU GPU
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 9/52
OpenCL
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 10/52
OpenCL (Open Computing Language)
OpenCL es el primer estándar libre y abierto para la
programación paralela de sistemas heterogeneos
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 11/52
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 12/52
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 13/52
o!elo !e "#ecución !e OpenC
Las aplicaciones de OpenCL trabajan en un host queenvía tareas a los dispositivos de computo.
●Contexto: El ambiente donde los work-items se ejecutan.
Estos son los dispositios! memoria y colas de comandos.●Programa : Colección de "ernels y #unciones●Kernel: Codigo para un work-item.●Work tem: La unidad básica de trabajo en OpenCL
$análogo a hilos o procesos%.
Command !ueues" Ejecución en orden o #uera de orden.
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 14/52
$or%&items● Los 'ernels son e#ecuta!os a#o un !ominio global !e $or%&item
●
Los $or%&items se agrupan en or%groups locales● Los $or%&items se pue!en configurar !e a cuer!o a las necesi!a!
algoritmo*
● Dimensiones Gloales+ ,-./0,-./
● Dimensiones Locales+ ,.10,.1
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 15/52
o!elo !e emoria !e OpenC
El manejo de Memoria es explícito
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 16/52
'ernels
●
"l con#unto !e uno o mas %ernels se llama prog● Compilación online y offline*
● OpenCL C Language (est2n!ar C33 con alguno
agrega!os)*
● Ca!a $or%&4tem e#ecuta una instancia !el %erne
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 17/52
OpenCL en resumen
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 18/52
emoria
"n OpenCL5 gran!es o#etos !e memoria principal !el 6ost o !el !i
(GPU5 7celera!or5 etc) necesita un tratamiento especial5 la primera
por9ue esta memoria es relativamente lenta5 la segun!a es por9ue a trav:s !el PC4&"0press toman tiempo*
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 19/52
emoria
clCreateBuffer ( y otras funciones e9uivalentesespecifican una serie !e an!eras 9ue !efinen
comportamiento y utili8ación !e los uffers !e
memoria*
Dic6as an!eras se pue!en clasificar en ; clas
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 20/52
<an!eras !e acceso en el !ispos
=CL>">"7D>O@LA+ el %ernel solo pue!e leememoria5 la escritura est2 pro6ii!a*=CL>">$4B">O@LA+ el %ernel solo pue!e e
en la memoria5 la lectura est2 pro6ii!a*=CL>">"7D>$4B"+ el %ernel pue!e leer yen la memoria*
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 21/52
<an!eras !e acceso en el 6o
=CL>">OB>$4B">O@LA+ "l 6ost solo pue!e leememoria*=CL>">OB>"7D>O@LA+ "l 6ost solo pue!e esc
la memoria*=CL>">OB>@O>7CC"+ e crea una región !e
memoria en el 6ost5 comparti!a entre !os o m2s %ernelsregión no se permite lectura o escritura por parte !el 6o
"stas an!eras no se pue!en cominar con+
CL>">$4B">O@LA E CL>">COPA>OB>"7D>O@LA
CL>">"7D>O@LA E CL>">COPA>OB>$4B">O@LA
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 22/52
<an!eras !e memoria en el 6o
=<vacio> + Comportamiento normal5 escrituras y lecturas
e0plicitas (!e !ispositivo a 6ost y viceversa)*=C!MEM!C"P#!$"%&!P&'+ 7l momento !e crear el
copian los !atos !e memoria !el 6ost al !ispositivo*=C!MEM!("C!$"%&!P&'+ e reserva un espacio
memoria para el !ispositivo (en 7 o GPU) al 9ue el 6o
acceso*
=C!MEM!U%E!$"%&!P&'+ "l uffer !e memoria en e
!ispositivo es Fliga!o a una región !e memoria en el 6os
"stas an!eras no se pue!en cominar con C!MEM!C"P#!$"%&
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 23/52
Pinne! emory
"ste tipo !e memoria es especial5 una región !e memori
6ost se liga con una región !e memoria en el !ispositivo5
las transferencias se le !an accesos e0clusivos a ca!a p
(ost y !ispositivo) para leer o escriir a trav:s !e D7
memory access)5 resultan!o en tiempos !e transferencia
menores*
"n OpenCL se 6ailita utili8an!o las an!erasC!MEM!U%E!$"%&!P&' y C!MEM!("C!$"%&
#unto con las funciones+
=clEn*ueueMapBuffer =clEn*ueueUnmapMem"bject
ff
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 24/52
cl"n9ueueap<uffer y
cl"n9ueueUnmapemO#ect
"stas funciones 6acen loc% y un unloc% en regiones !e memoria
=CL>7P>$4B"+ e pue!e escriir en el uffer5 se transferir2
!ispositivo por D7*=CL>7P>"7D+ e pue!e leer el uffer5 se transferir2n !atos
!ispositivo por D7*
=CL>7P>"7D E CL>7P>$4B"+ ar2 transferencias !uralectura y escritura !e la memoria*
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 25/52
'ernel y $or%&4tems
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 26/52
+or,-items son la unidad b.sica de trabajo en "penC/ estos s
ejecutan en grupos 0 de manera paralela1
os +or,-2tems dentro de un grupo pueden compartir datos 0
sincroni3arse1
$or%&4tems
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 27/52
$or%&4tems
4or,!dim in!ica el numero !e
Hn!ices 9ue i!entifican a ca!a$or%&4tem*
global!4or,!si3e es el
nImero total !e $or%&4tems
por ca!a !imensión*
local!4or,!si3e es el nImero
!e $or%&4tems por ca!a
!imensión !e ca!a $or%&
Group*
' l
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 28/52
'ernel
= El modelo de programaci5n paralela de
datos en "penC es de dos tipos6= Explícita6 "l programa!or especifica el numero
!e $or%&4tems 9ue e#ecutar2n el %ernel y !efine
la !ivisión !e $or%&4tems entre $or%&Groups*
= 2mplícita6 "l programa!or especifica el numero!e $or%&4tems 9ue e#ecutar2n el %ernel5 y
OpenCL !efinir2 la !ivisión !e $or%&4tems entre
$or%&Groups*
El 7ernel es la funci5n principal *ue se ejecutara en paralelo/ cada
2tem ejecuta una copia del ,ernel1
' l D fi i ió
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 29/52
'ernel+ Definición
>>%ernel voi! Jector7!!(>>gloal float Kvector,5 >>gloal float Kvector.5 >>gloal
uint in!e0 M get>gloal>i!(-)N
totalin!e0 M vector,in!e0 vector.in!e0N
R
voi! Jector7!!(float Kvector,5 float Kvector.5 float Ktotal)
for(int in!e0 M -N in!e0 S J"CBO>4T"N in!e0)
totalin!e0 M vector,in!e0 vector.in!e0N
R
8efin
8efi
' l D fi i ió ! i
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 30/52
'ernel+ Definición !e memori
En "penC se debe especificar la regi5n de memoria donde s
los datos1
= !!private emoria e0clusiva !e ca!a $or%&4tem5 no es accesi
otros $or%&4tems*= !!local emoria !e cac6e accesile para to!os los $or%&4tems
!entro !e un $or%&Group5 no es accesile para otros $or%&4tem= !!constant emoria !e solo lectura5 es accesile para to!os los
$or%&4tems= !!global emoria general !e lectura y escritura5 es accesile pa
to!os los $or%&4tems
' l Bi ! D t
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 31/52
="scalares= c6ar 5 uc6ar5 s6ort5 us6ort5 int5 uint5 long5 ulong5 float= ool5 intptr>t5 ptr!iff>t5 si8e>t5 uintptr>t5 voi!5 6alf
=4m2genes= image.!>t5 image;!>t5 sampler>t
=Jectores= Bamaos !e Jector .5 /5 15 y ,V (c6ar.5 us6ort/5 int15 float,V5 !oule.5 W= Operaciones Jectori8a!as= Xunciones nativas
'ernel+ Bipos !e Datos
' l J t
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 32/52
'ernel+ Jectores
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 33/52
4m2genes
4 2
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 34/52
4m2genes
OpenCL posee una serie !e funciones primitivas para la manipulaci
im2genes5 la utili8ación !e im2genes en lugar !e uffers !e !atos peneficioso en ciertos casos*
= Las im2genes se guar!an en el cac6e !e te0turas !el !ispositivo (
soporta)*
= "ste cac6e !e te0tura permite accesos m2s r2pi!os a los ytes*
= asta el est2n!ar ,*.5 las im2genes solo pue!en ser !e solo lectu
escritura*= La creación !e estos uffers es !iferente !el la!o !el 6ost
= "l acceso a los !atos !e la imagen es !iferente !el la!o !el 'erne
4m2genes (ost)
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 35/52
4m2genes (ost)
La creación !e uffers !e imagen !es!e el 6ost5 se 6ace a trav:s !e
funciones+
= clCreate2mage98+ crea un uffer !e imagen !e !os !imensiones*
= clCreate2mage:8+ crea un uffer !e imagen !e tres !imensiones*
= clCreate2mage+ crea un uffer !e imagen !e cual9uier tipo*
"stas funciones son an2logas a clCreateBuffer *clCreate2mage98 y clCreate2mage:8 son funciones elimina!as !e
est2n!ar
,*. y reempla8a!as con clCreate2mage*
4m2genes (ost)
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 36/52
4m2genes (ost)
La escritura y lectura !e im2genes es an2loga a la escritura y lectura
= clEn*ueue+rite2mage+ "scrie !atos a una imagen !es!e un apun
6ost*
= clEn*ueue'ead2mage+ Lee los !atos !e una imagen en el !isposit
escriirlos en un apunta!or en el 6ost*
"stas funciones son pareci!as a clEn*ueue+riteBuffer y clEn*ueu
4m2genes ('ernel)
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 37/52
4m2genes ('ernel)
Los tipos !e im2gen 9ue son soporta!os por el %ernel*
= image.!>t+ Una im2gen .D*
= image;!>t+ Una im2gen ;D*
= image.!>array>t+ Un arreglo !e im2genes .D*
= image,!>t+ Una imagen ,D
= image,!>uffer>t+ Una imagen ,D crea!a !es!e uffer
= image,!>array>t+ Un arreglo !e im2genes !e ,D*
"stos tipos van prece!i!os por los Califica!ores !e acceso+
= >>rea!>only+ olo lectura*
= >>rite>only+ olo escritura*
4m2genes+ Lectura y escritura
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 38/52
4m2genes+ Lectura y escritura
"l acceso a los ytes !e las im2genes es a trav:s !e las funciones+
; read!image+ egresa un pi0el en una coor!ena!a estaleci!a*
; 4rite!image+ "scrie un pi0el en una coor!ena!a estaleci!a*
7!em2s5 read!image re9uiere !e un sampler!t 9ue !efine como se
los pi0eles*
; normali3ed coords
; address mode
; filter mode
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 39/52
$or%&groups y incroni8ac
$or% groups y sincroni8ación
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 40/52
$or%&groups y sincroni8ación
Un aspecto esencial !el mo!elo !e e#ecución !e OpenCL es la !ef
un 4D Inico gloal y una serie !e 4D Inicos locales para los $or%&4
"stos 4DYs nos permiten i!entificar5 !on!e resi!e ca!a instancia pa'ernel en el espacio !e los Hn!ices*
$or% groups y sincroni8ación
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 41/52
$or%&groups y sincroni8ación
Los or%&items se e#ecutan en grupos5 !entro !e estos grupos5 los o
comparten algunos recursos y pue!en sincroni8arse entre ellos*
La sincroni8ación viene a trav:s !e las funciones mem!fence y barr
= mem!fence6 Bo!os los or%&items !entro !el or%&group !een te
lectura o escritura a memoria al pasar esta función5 recie como pa
cual9uiera !e estas !os constantes o cominación +
C7!"C(!MEM!E)CE/ C7!G"B(!MEM!E)CE1
= barrier6 Ca!a or%&items !entro !el or%&group !ee esperar en e
función 6asta 9ue el resto !e los or%&items lleguen5 recie como p
cual9uiera !e estas !os constantes o cominación+
C7!"C(!MEM!E)CE/ C7!G"B(!MEM!E)CE
$or%&groups+ emoria Local
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 42/52
$or%&groups+ emoria Local
La memoria local es un cac6e !e latencia muy a#a5 este cac6e es
reparti!o entre to!as las uni!a!es !e computo y es accesile por tlos or%&items !entro !e un or%&group*
"sta memoria es utili8a!a para compartir !atos entre or%&items y
acelerar algunos procesamientos*
Por ser una memoria muy rapi!a5 el tamao !e este cac6e es muy
pe9ueo*
"n el 'ernel5 esta memoria se !eclara con el califica!or !!local
ina0
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 43/52
ina0
"l algoritmo !e Is9ue!a !el menor y mayor nImero en un vector
algoritmo iterativo 9ue no se pue!e paraleli8ar con la simple t:cnic!ato por or%&item*
ina0+ paralelo
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 44/52
ina0+ paralelo
= Divi!ir el vector en @ su&vectores !e tamao especHfico*= 7signar un su&vector a ca!a or%&group*
= Ca!a or%&item copiara un !ato !el su&vector a un uffer local= "l or%&item - uscar2 el mHnimo y m20imo en el uffer local !e
manera iterativa*= "l resulta!o parcial se guar!ara en una índice especifico !e el v
!e resulta!os5 el or%&item - !e ca!a or%&group incrementa
atómicamente este Hn!ice*
= Cuan!o to!os los or%&items - 6allan termina!o !e encontrar emHnimo y m20imo5 un Iltimo or%&item uscara el mHnimo y m20
final !entro !el vector !e resulta!os*
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 45/52
4nteroperaili!a! entreOpenCL y OpenGL
4nteroperaili!a!
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 46/52
4nteroperaili!a!
OpenCL y OpenGL son !os 7P4 con una eficiente interoperaili!a!
un la!o OpenCL esta !isea!o para computo paralelo para !iferen
plataformas5 mientras 9ue OpenGL es una popular 7P4 gr2fica*
"sta interoperaili!a! rin!a algunas venta#as+
= La programación !e %ernels en OpenCL es mas sencillo 9ue uti
lengua#e !e somrea!o !e OpenGL (GLL)*= "l cómputo !e %ernels es asHncrono al sistema !e ren!er !e Op= OpenCL funciona en otros !ispositivos a!em2s !e las GPUYs*= @o 6ay necesi!a! !e transferencias por el PC4e*
4nteroperaili!a!
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 47/52
4nteroperaili!a!
"sta interoperaili!a! se logra crean!o un conte0to comparti!o en
OpenCL y OpenGL*
4nteroperaili!a!
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 48/52
4nteroperaili!a!
ailitar esta interoperaili!a! se 6ace a trav:s !e la función clCreateContext
primer par2metro !e la función !efine las propie!a!es !el conte0to*
"stas propie!a!es !epen!en !el sistema operativo+
7 trav:s !e un Conte0to ' en Linu0 y $in!os+= Linu0
= gl=GetCurrentContext= gl=GetCurrent8ispla0
= $in!os= 4glGetCurrentContext
= 4glGetCurrent8C
A a trav:s !e un 6aregroup en ac+
= CGGetCurrentContext= CGGet%areGroup
4nteroperaili!a!+ anipulación !e Be0tu
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 49/52
e ope a !a! a pu ac ó !e e u
OpenCL crea un uffer !e memoria !es!e una Be0tura OpenGL
e0istente*
"ste uffer se crea con la función clCreateromG&exture*
Las Be0turas OpenGL son interpreta!as como im2genes en Ope
manipulan en el %ernel con las funciones 4rite!image5 read!im
anipulación !e Be0turas5 pasos
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 50/52
p 5 p
= Crear la te0tura OpenGL con la función gl&ex2mage98 (!ee
uffer @ULL)*
= Crear el uffer !e memoria en OpenCL con clCreateromGesta función recie el 4D !e la te0tura OpenGL*
7ntes !e !iu#ar la escena+
= <lo9uear la te0tura con clEn*ueue(c*uireG"bjects para
OpenGL no interfiera*= "#ecutar el %ernel 9ue manipula la te0tura*= Lierar la te0tura con clEn*ueue'eleaseG"bjects para 9u
OpenGL pue!a !iu#arla*
4nteroperaili!a!+ anipulación !e <uffe
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 51/52
p p
OpenCL es capa8 !e acce!er a otros tipos !e uffer !e OpenG
como Jertices5 @ormales5 Colores5 "lementos5 etc*
"stos uffers5 a !iferencia !e las te0turas5 se pue!en utili8ar co
y escritura a la ve8*
Las variales !e acceso a estos uffers !e OpenGL se 6acen a
la función clCreateromGBuffer *
anipulación !e <uffer5 pasos
7/23/2019 Diapositivas Curso OpenCL
http://slidepdf.com/reader/full/diapositivas-curso-opencl 52/52
p 5 p
= Crear los uffers OpenGL con la función glGenBuffers= Crear el uffer !e memoria en OpenCL con clCreateromG
esta función recie el 4D !el uffer OpenGL*
7ntes !e !iu#ar la escena+
= <lo9uear los uffers con clEn*ueue(c*uireG"bjects para
OpenGL no interfiera*
= "#ecutar el %ernel 9ue manipula los uffers*= Lierar los uffers con clEn*ueue'eleaseG"bjects para 9
OpenGL pue!a !iu#arlos*
top related