14
OpenCL - The open standard for parallel programming of heterogeneous systems

OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL - The open standard for parallel programming of heterogeneous systems

Page 2: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

GPU-k általános számításokhoz

GPU – Graphics Processing Unit Képalkotás: sok, általában egyszerű és független művelet

< 2006: programmable shaders renderelés (Pixar RenderMan – Toy Story)

2006: CUDA -Compute Unified Device Architecture

csak Nvidia kártyákon kezdetben 128 CUDA core, 8 compute unit (Tesla c870) 2008: OpenCL – cross-platform Khronos csoport (OpenGL!) OpenCL 1.0: Mac OS X Snow Leopard 2009 fontosabb partnerek: AMD, Intel (Larrabee) és természetesen Nvidia Alternatívák: DirectCompute, OpenMP, OpenACC stb.

Page 3: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL working group members

Nvidia in chair, Apple is specification editor

Már most is tekinthető általános szabványnak.

Page 4: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL könyvek

OpenCL Programming Guide - The “Red Book” of OpenCL http://www.amazon.com/OpenCL-Programming-Guide-Aaftab-Munshi/dp/0321749642OpenCL in Action http://www.amazon.com/OpenCL-Action-Accelerate-Graphics-Computations/dp/1617290173/Heterogeneous Computing with OpenCL http://www.amazon.com/Heterogeneous-Computing-with-OpenCL-ebook/dp/B005JRHYUSThe OpenCL Programming Book http://www.fixstars.com/en/opencl/book/

Page 5: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL API

AMD http://developer.amd.com/zones/OpenCLZone/INTEL http://software.intel.com/en-us/articles/opencl-sdk/NVIDIA http://developer.nvidia.com/opencl

Page 6: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: egy példa

__kernel void add_vector(__global float *A,__global float *B,_global float *C){ int tidx = get_global_id(0); C[tidx]=A[tidx]+B[tidx];}

void add_vector(int dim,float *A,float *B,float *C){ for(int i=0;i<dim;i++) C[i]=A[i]+B[i];}

Soros megoldás OpenCL megoldás

Különbségek: ?

Page 7: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: egy példa (C)

__kernel void add_vector(__global float *A,__global float *B,_global float *C){ int i = get_global_id(0); C[i]=A[i]+B[i];}

void add_vector(int dim,float *A,float *B,float *C){ for(int i=0;i<dim;i++) C[i]=A[i]+B[i];}

Soros megoldás OpenCL megoldás

Különbségek: - hol a vektor dimenziója? Soros kód: dim változó OpenCL: a get_global_id(0) maximumális értéke a dimenzió, melyet előzőleg beállítottunk a kernel hívás előtt - milyen memória címeket használhatunk? Minden OpenCL compute device saját memória területtel rendelkezik, melyet előre le kell foglalnunk

Page 8: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: compute devicememory types

Global domain: work item sizeLocal groups: workgroups

Eszköz specifikus a paraméterezés, de mindent le tudunk kérdezni futásidőben.

Page 9: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: memória

Az architektúra legnagyobb hátránya:

Egy számolás eredményének elérése: host → device → host

Még abban az esetben is, ha a kódunkat a lokális CPU-n futtatjuk!

A másolás egyik korlátja maga a PCI-express

Lehetőség párhuzamos másolás-számolásra

Megjegyzés:

1. sok esetben hatékonyabb helyben újraszámolni mint beolvasni 2. sok esetben a kiolvasás lassúsága miatt nem hatékony 3. Nincs virtuális memória → de lesz!

Page 10: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: memória

Az architektúra legnagyobb hátránya:

Egy számolás eredményének elérése: host → device → host

Még abban az esetben is, ha a kódunkat a lokális CPU-n futtatjuk!

A másolás egyik korlátja maga a PCI-express

Lehetőség párhuzamos másolás-számolásra

Megjegyzés:

1. sok esetben hatékonyabb helyben újraszámolni mint beolvasni 2. sok esetben a kiolvasás lassúsága miatt nem hatékony 3. Nincs virtuális memória → de lesz!

Hierarchikus memória: Minél lentebb megyünk annál kisebb a memória mérete, cserébe egyre gyorsabb!

1. Host memory Csak a CPU éri el, 10-20 GB/s Akár 512 GB2. Global/Constant memory Csak az adott device-on látható 100-250 GB/sec (GPU), <6GB3. Local memory Csak egy adott workgroup látja 16-64 KB/work-item4. Private memory Csak az adott work-item látja 16-64 KB

Page 11: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: fordításFordítás történhet offline és online módon. Utóbbi az elterjedt. → univerzális

OpenCL API: C/C++ → objektumok: Konfiguráció:

Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok kiosztása

Memória: Buffer - memória blokkok Image - 2D vagy 3D kép Végrehajtás: Program - kernelek Kernel - maguk a feladatok

Példa fordításra:

Mac OS X (>10.6): g++ -framework OpenCL cl_test.cpp -o cl_test

Linux: Nvidia SDK

g++ -I<NVIDIA_SDK>/OpenCL/common/inc/ cl_test.cpp -o cl_test

Page 12: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

OpenCL: fordítás

Page 13: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

Példa: Alacsony szint képi űleírók számolása

Segmentation Dense Grid Region of Interest

Page 14: OpenCL - The open standard for parallel programming of ...€¦ · C/C++ → objektumok: Konfiguráció: Device - eszköz objektuma Context - eszközök → környezet Queue - feladatok

Példa: Alacsony szint képi űleírók számolása

Sok ezer független leíró képenként → a párhuzamosítás alapja Mivel GPU/CPU közös kód:

- csak egy dimenziós párhuzamosítás - no image support

Kis memória igény:

- maga a nyers kép pl. 1Mio*3Byte - gradiens képek: 1Mio*4Byte - leírók: 128*4*N Byte

Nyereség: ~10x CPU-hoz képest (nem optimális)

Még több ha PCA + Fisher számolás : ~40x