CUDA & CUDA.NET – czyli istne CUDA Piotr Ablewski

1 CUDA & CUDA.NET – czyli istne CUDA Piotr Ablewski ...
Author: Fryderyk Sarota
0 downloads 4 Views

1 CUDA & CUDA.NET – czyli istne CUDA Piotr Ablewski

2 Co to jest CUDA? Compute Unified Device Architecture NvidiaWindows, Mac OS X, Linux

3

4

5 Może coś więcej… C / C++ Własne IDE Kompilator nvcc Debugger cuda-gdbprofiler

6 Dlaczego CUDA? ©ywilizowany język Obliczenia na GPUPamięć współdzielona (48 KB) w bloku ( wątków) Cache Dowolna alokacja pamięci w GPU Zapewniona kompatybilność wstecz w kolejnych wersjach

7

8 So sweet xD

9 Ale nie całkiem…  C++ bez rekurencji i wskaźników na funkcje, nie ma zmiennych statycznych i funkcji ze zmienną liczbą parametrów Inne zaokrąglanie double Wąziutkie gardło – PCI-Express

10 A co najfajniejsze – tylko dla kart Nvidia 

11 Zastosowania Fizyka NumerykaBiologia, kryptografia, obliczenia inżynierskie (QUADRO, TESLA) AI Przetwarzanie rozproszone GRY

12 A gdzie .NET? A gdzie C#?

13 CUDA.NET C# i wsparcie dla VS >= 2k8

14

15 Co w .NET? Nakładka na C – nowe API i biblioteki do obliczeń (np. FFT, BLAS) opartych na GPU Działa na Mono – OpenSource’owcy , nie płaczcie

16 Kompatybilność Win XP + Win Server 2003 + Linux Mac OS X.NET Framework 2.0 + Zarówno komputery 32- i 64 bit

17 Jak użyć? Piszemy zwykłą AppkęFunkcje, które mają wykonać się na rdzeniu CUDA w pliku .cu Dodajemy build rule: nvcc *.cu –cubin Dodajemy do projektu referencję do CUDA.net i piszemy kod

18 And so we code…. We spend hours in the debug mode  Taki drobny żarcik, podobno ostatnio jestem za poważny

19

20 int BLOCK_SIZE = 256; CUDA cuda = new CUDA(0, true); cudaint BLOCK_SIZE = 256; CUDA cuda = new CUDA(0, true); cuda.LoadModule(Path.Combine(Environment.CurrentDirectory, "kernel.cubin")); CUfunction func = cuda.GetModuleFunction("hslfilter"); cuda.SetParameter(func, 0, (uint)dev_values.Pointer); cuda.SetParameter(func, (int)IntPtr.Size, ratio); cuda.SetParameterSize(func, (uint)IntPtr.Size+4); cuda.SetFunctionBlockShape(func, BLOCK_SIZE, 1, 1); cuda.Launch(func, (input.Length / 3) / BLOCK_SIZE, 1); output = new byte[input.Length]; cuda.CopyDeviceToHost(dev_values, output); cuda.Free(dev_values);

21 Kolejne morderstwo? - not found ..... - CUDAfy.NET still ALIVE!!! Co się dzieje? A gdyby tak każdy ubijał swój .NETowy projekt? Byłoby nas mniej, .NETowców….

22

23

24 Co w CUDAfy? CUDAfy Library (GPGPU Extensions)                                                 CUDAfy Library (GPGPU Extensions) CUDAfy Translator (.NET to CUDA C) CUDAfy Host Library (Interact with GPU from Host App) CUDAfy Math Library (FFT, RAND, SPARSE, BLAS) CUDAfy Module Viewer GUI CUDAfy Command Line Tool Run on Windows or Linux (Mono)

25 To może zobaczmy jak to działa.DEMA