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

Orvosi képfeldolgozási algoritmusok párhuzamos megvalósítása CUDA technológiával Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor.

Hasonló előadás


Az előadások a következő témára: "Orvosi képfeldolgozási algoritmusok párhuzamos megvalósítása CUDA technológiával Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor."— Előadás másolata:

1 Orvosi képfeldolgozási algoritmusok párhuzamos megvalósítása CUDA technológiával Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor

2 I. GPGPU és a CUDA 2

3 GPGPU General Purpose Computation on GPUs 3

4 CPU vs GPU 4

5 NVIDIA® CUDA™ 5 GPGPU elősegítése Compute Unified Device Architecture általános programozhatóság shader-nyelvek számítógépes grafika skálázhatóság szál-hierarchia memória-hierarchia

6 A CUDA Architektúra 6

7 CUDA támogatottság C/C++  C Runtime for CUDA.NET nyelvek  CUDA.NET – ltd.co.il/en/products/cuda.net Java  JaCuda – Python, Fortran, …  Windows / Linux / MacOS 7

8 Kernelfüggvények 8

9 Szálhierarchia 9

10 Memóriahierarchia 10

11 NVIDIA GeForce 9800GTX multiprocesszor 8 szálprocesszor / MP  128 szálprocesszor Memória: 512MB GDDR3 256-bit busz 1100 MHz 70.4 GB/s 1.1-es számítási kapacitás

12 12 rácsdimenziók : 65535, 65535, 1 blokkdimenziók : 512, 512, 64 szál/proc : 512 konstans memória : 64KB MP : 8KB regiszter/MP : 8192 aktív blokk : 8 atív szál : ás számítási kapacitás: 32-bites atomi függvények es számítási kapacitás:

13 II. CUDA programozás 13

14 Program felépítés A hoszton és az eszközön futó kód együtt C nyelvi kiterjesztések Szétválasztás fordítási időben Ajánlott fejlesztőkörnyezet: Microsoft Visual Studio 14

15 Nyelvi kiterjesztések - függvények __host__ – a hoszton fut, csak a hosztról lehet hívni __device__ – az eszközön fut, csak az eszközről hívható __global__ – kernel függvény – a párhuzamosítás eszköze – az eszközön fut, csak a hosztról lehet hívni – Pl.: deklaráció: __global__ void func(float* parameter); meghívás: func >>(parameter); 15

16 Nyelvi kiterjesztések - változók __device__ – az eszköz globális memóriájában foglal helyet __shared__ – egy szál blokk közös memóriájában van – csak a blokkban lévő szálakból érhető el __constant__ – az eszköz konstans memóriaterületén helyezkedik el – minden szálból, ill. a hosztról is elérhető Beépített változók (kernel függvényekben) – gridDim, blockDim – blockIdx, threadIdx 16

17 Példa – mátrix összeadás __global__ void matAdd(float A[N][N], float B[N][N], float C[N][N]) { int i = blockIdx.x * blockDim.x + threadIdx.x; int j = blockIdx.y * blockDim.y + threadIdx.y; if (i < N && j < N) C[i][j] = A[i][j] + B[i][j]; } int main() { // kernel hivas dim3 dimBlock(16, 16); dim3 dimGrid((N + dimBlock.x – 1) / dimBlock.x, (N + dimBlock.y – 1) / dimBlock.y); matAdd >>(A, B, C); } 17

18 Memória menedzsment 18 +Textúra memória: cache-elt foglalás, felszabadítás: – cudaMalloc(void** ptr, size_t nbytes); – cudaFree(void* ptr); másolás: – cudaMemcpy(void* dst, void* src, size_t nbytes, enum cudaMemcpyKind direction);

19 Szinkronizáció Hoszt - eszköz – kernel hívás aszinkron – memória másolás szinkron Szálak között – ha több szál írja/olvassa ugyanazt a memóriaterületet, a sorrend nem determinisztikus – megoldás: __syncthreads(); szinkronizációs pont: csak akkor halad tovább a végrehajtás, ha a blokkban minden szál eljutott eddig az utasításig 19

20 CUDA program általános menete 1.Adatok beolvasása a hoszton 2.Adatok másolása a hosztról az eszköz globális memóriájába 3.Kernel függvény hívása I.adatok másolása a globális memóriából a közös memóriába II.számításokpárhuzamos III.eredmények visszaírása a közös memóriából a globális memóriába 4.Eredmény másolása az eszközről a hoszt memóriájába 5.Eredmény kiírása 20

21 III Párhuzamosan megvalósított algoritmusok 21

22 Kulcscsontkeresés 22

23 23 Kulcscsontkeresés  Előfeldolgozás (gyors)  Radon transzformáció (~1-2 mp) kulcscsont főtengelyének meghatározása  Snake algoritmus (~2-3 mp): Kulcscsont körvonalának iteratív meghatározása  Kulcscsont-eltűntetés…

24 24 Előfeldolgozás 1.Bejövő kép 2.Gauss szűrés 3.Gradiens számítás 4.Bejövő képpel pixelenkénti szorzás 5.Kulcscsont iránya szerinti szurés 6.Maximális értékek „elfojtása”  Kimeneti kép

25 Radon-transzformáció 25 (2D-s, vonal szerinti Randon transzformáció) °0°45°90°-90°

26 Mátrix konvolúció 26

27 Párhuzamos megvalósítás Az eredmény mátrix minden egyes eleméhez külön szál Egy szálon belül az összeg kiszámítása for ciklussal Blokk méret: 16x16 Textúra memória használata 27

28 Tesztelés: Prewitt operátor 28

29 FFT DFT: Radix-2 FFT: 29 A B A+B A-B

30 Butterfly diagram 30 W83W83 W80W80 W80W80 W80W80 W80W80 W80W80 W80W80 W80W80 W82W82 W82W82 W82W82 W81W81 x(4) x(0) x(2) x(1) x(6) x(5) x(3) x(7) X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7)

31 Párhuzamos megvalósítás Annyi szál, ahány pillangó egy szinten (N/2) Minden iterációban minden szál egy pillangó műveletet végez Közös memória használata __syncthreads() iterációnként 2D FFT: 1D FFT-k sorozata horizontálisan, majd vertikálisan 31

32 Teszt 32

33 Kitekintés 100-szoros gyorsítás az elvi határ Számításintenzív feladatoknál (ahol sok egyszerű számolási műveletet végzünk egy adattal) ez jó közelítéssel elérhető Memóriaintenzív feladatoknál szoros gyorsítás reális A tüdőkörvonal meghatározás inkább az utóbbi jellegű 33


Letölteni ppt "Orvosi képfeldolgozási algoritmusok párhuzamos megvalósítása CUDA technológiával Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor."

Hasonló előadás


Google Hirdetések