Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaBenjámin Bognár Megváltozta több, mint 8 éve
1
Google Summer of Code 2015 OpenCL image support for the r600g driver
2
Képek: http://www.google-melange.com
3
a
4
Min szeretnék dolgozni? Kapcsolatfelvétel a mentorral
5
Project proposal Célok Miért jó ez? Milestone-ok Architektúra vázlata
6
Proposalok elbírálása
7
Kapcsolatfelvétel a szervezettel Fejlesztési környezet Folyamatok Szokások
8
Kép balra: http://goo.gl/SNp5l4
9
OpenCL image support for the r600g driver
11
GPGPU Képek: AMD Accelerated Parallel Processing OpenCL Programming Guide
12
OpenCL image support for the r600g driver OpenCL: GPGPU keretrendszer GPU-side: OpenCL C nyelv kernel void vec_add(global float *a, global const float *b) { int i = get_global_id(0); a[i] += b[i]; }
13
OpenCL image support for the r600g driver OpenCL: GPGPU keretrendszer GPU-side: OpenCL C nyelv CPU-side: C, C++ lib [...] // inicializáció cl_program program = clCreateProgramWithSource(...); cl_kernel kernel = clCreateKernel(program, "vec_add", [...]); clSetKernelArg(kernel, 0, sizeof(cl_mem), &mem_buf_a); clSetKernelArg(kernel, 1, sizeof(cl_mem), &mem_buf_b); size_t work_size[] = {16}; clEnqueueNDRangeKernel(q, kernel, [...], work_size, [...]);
14
OpenCL image support for the r600g driver A GPU hatékonyan kezel képeket
15
OpenCL image support for the r600g driver A GPU hatékonyan kezel képeket Interpoláció Kép: http://goo.gl/ESCXDY
16
OpenCL image support for the r600g driver A GPU hatékonyan kezel képeket Interpoláció Swizzling (cache!) x = x1 x0 bits y = y1 y0 bits mem_addr = y1 x1 y0 x0 bits Kép: http://www.slideshare.net/shripadthite/jobtalk
17
OpenCL image support for the r600g driver A GPU hatékonyan kezel képeket Interpoláció Swizzling Formátum-konverzió XRedGreenBlue 15 bits RedGreenBlue 5 bits6 bits5 bits RedGreenBlue 8 bits
18
OpenCL image support for the r600g driver OpenCL image és sampler objektumok const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_NEAREST; kernel void red_to_green(read_only image2d_t input, write_only image2d_t output) { size_t x = get_global_id(0); size_t y = get_global_id(1); uint4 color = read_imageui(input, sampler, (int2)(x, y)); // do something with color write_imageui(output, (int2)(x, y), color); }
19
OpenCL image support for the r600g driver mesa: 3D, video, GPGPU libek gyűjteménye 3D rendering API-k (pl. OpenGL) Video gyorsító API-k (pl. VAAPI) Eszközillesztők (driverek) r600g: AMD R600, R700, Evergreen és Northern Islands GPU-k g szuffix: Gallium
20
https://en.wikipedia.org/wiki/Gallium3D
21
Gallium 3D Függ-e az alábbitól? APIHWOS IgenNemNem* NemIgenNem Igen
22
OpenCL state tracker: clover API-szintű absztakciók menedzselése Buffer, image, sampler Adatmozgatás Események OpenCL C –> GPU asm (most: R600 ISA) Device Driver adja a targetet Clang+LLVM fordít Clang OpenCL frontend LLVM AMDGPU backend Feladat: Fordítsa le a képekkel kapcsolatos OpenCL kódot is!
23
LLVM Fordítóprogram-keretrendszer LLVM IR: ASM szintű gépfüggetlen nyelv SSA: Static Single Assignment @.str = internal constant [14 x i8] c"hello, world\0A\00" declare i32 @printf(i8*,...) define i32 @main(i32 %argc, i8** %argv) nounwind { entry: %tmp1 = getelementptr [14 x i8]* @.str, i32 0, i32 0 %tmp2 = call i32 (i8*,...)* @printf( i8* %tmp1 ) nounwind i32 0 }
24
LLVM Front-end: nyelv -> LLVM Back-end: LLVM -> ? gépi kód ASM szövege Másik nyelv LLVM bitkód Bitkódok összelinkelhetőek Rengeteg optimalizációs algoritmus
25
OpenCL C -> R600 ISA Front-End: Clang Built-In Library: libclc LLVM bitkód library Feladat: Kép típus Képi builtinek Képek: AMD Accelerated Parallel Processing OpenCL Programming Guide
26
Device Driver: r600g API-szintű absztrakciók -> GPU-szintű fogalmak GPU „felparaméterezése”: regiszterek Kernel kezdőcíme Erőforrások kezdőcímei, metaadatai: memóriaterületek nézetei Nézetek VTX/TEX: csak olvasható nézet, vertex és texture bufferekre RAT (aka UAV): írható/olvasható nézet Van belőlük több (VTX0, VTX1, RAT5 stb.) Erőforrások leképezése Kernel input -> VTX0 Global bufferex -> VTX1, RAT0 read_only képek -> VTXn (n >= 2) write_only képek -> RATn (n >= 1)
27
Kép: Evergreen Family Instruction Set Architecture
28
Implementált feature-ök Képek metaadatai (dimenziók, pixelformátum) get_image_* Adatok küldése a kernelnek Képek olvasása és írása read_image* write_image* Csak 2D támogatott Sampler objektumok Csak kernelparaméterben Tesztek
29
Open-Source projektek mesa: maga a driver LLVM: OpenCL C fordításához libclc: OpenCL C beépített függvények piglit: tesztek Kevés patch került upstream-be (még)
30
Linkek Blog: zogi-gsoc2015.blogspot.comzogi-gsoc2015.blogspot.com GSoC: www.google-melange.comwww.google-melange.com LLVM Language Reference: llvm.org/docs/LangRef.htmlllvm.org/docs/LangRef.html Evergreen ISA: developer.amd.com/wordpress/media/2012/10/AMD_Evergreen- Family_Instruction_Set_Architecture.pdf developer.amd.com/wordpress/media/2012/10/AMD_Evergreen- Family_Instruction_Set_Architecture.pdf
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.