Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Google Summer of Code 2015 OpenCL image support for the r600g driver.

Hasonló előadás


Az előadások a következő témára: "Google Summer of Code 2015 OpenCL image support for the r600g driver."— Előadás másolata:

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

10

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


Letölteni ppt "Google Summer of Code 2015 OpenCL image support for the r600g driver."

Hasonló előadás


Google Hirdetések