SlideShare una empresa de Scribd logo
1 de 19
Paweł Nowak Generowanie i wizualizacja zbioru Mandelbrota na CUDA
Zbiór Mandelbrota (żuk Mandelbrota) -podzbiór płaszczyzny zespolonej, którego brzeg jest jednym ze sławniejszych fraktali. Nazwa tego obiektu została wprowadzona dla uhonorowania jego odkrywcy, francuskiego matematyka Benoit Mandelbrota. Co to jest zbiór Mandelbrota?
By zdefiniować zbiór Mandelbrota, zdefinujemy najpierw dla danego punktu p na płaszczyźnie zespolonej nieskończony ciąg liczb zespolonych z0, z1, z2, ... o wartościach zdefiniowanych następująco: 	z0 = 0 	zn+1 = zn2 + p Zbiór Mandelbrota (ang. Mandelbrot Set) definiujemy jako zbiór liczb zespolonych p takich, że zdefiniowany powyżej ciąg nie dąży do nieskończoności. Zbiór Mandelbrota z matematycznego 					punktu widzenia
	Otóż fraktalem jest brzeg tego zbioru. W praktyce by narysować fraktale oblicza się kolejne przybliżenia zbioru, które oznacza się różnymi kolorami. I tak kolejne przybliżenia zdefiniujemy jako zbiór liczb zespolonych p takich, że: 1 przybliżenie: wszystkie punkty 2 przybliżenie: |z1| < 2 3 przybliżenie: |z1| < 2 oraz |z2| < 2 4 przybliżenie: |z1| < 2 oraz |z2| < 2 oraz |z3| < 2 ...  n-te przybliżenie: |z1| < 2 oraz |z2| < 2, ... |zn-1| < 2 Gdzie w tym wszystkim fraktal?
Jak ten fraktal wygląda?
CUDA (ang. ComputeUnifiedDeviceArchitecture) to opracowana przez firmę Nvidia uniwersalna architektura procesorów wielordzeniowych (głównie kart graficznych) umożliwiająca wykorzystanie ich mocy obliczeniowej do rozwiązywania ogólnych problemów numerycznych w sposób wydajniejszy niż w tradycyjnych, sekwencyjnych procesorach ogólnego zastosowania. CUDA?
Integralną częścią architektury CUDA jest oparte na języku programowania C środowisko programistyczne wysokiego poziomu, w którego skład wchodzą m.in. specjalny kompilator (nvcc), debugger (cuda-gdb, który jest rozszerzoną wersją debuggeragdb umożliwiającą śledzenie zarówno kodu wykonywanego na CPU, jak i na karcie graficznej), profiler oraz interfejs programowania aplikacji. Dostępne są również biblioteki, które można wykorzystać w językach Python, Fortran, Java, C# oraz Matlab. Pierwsze wydanie środowiska wspierało systemy operacyjne Windows oraz Linux. Od wersji 2.0 wspierany jest również Mac OS X. Jak programować na CUDA?
CUDA C rozszerza C pozwalając programiście na definiowanie funkcji C nazywanych kernelami (kernels), które są wykonywane N razy równolegle przez N wątków CUDA Kernele są definiowane poprzez dodanie specyfikatora __global__ przy deklaracji. Wywołanie kernelu odbywa się poprzez specjalną konstrukcję wywołania funkcji z modyfikatorem <<…>> w, którym jest podana ilość bloków i wątków, które wywołują kernel  	Każdy wątek otrzymuje swoje specyficzne ID, które jest dostępne poprzez strukturę threadIdx CUDA – Kernele
 // Kerneldefinition __global__ void VecAdd(float* A, float* B, float*C)      {  int i = threadIdx.x;  C[i] = A[i] + B[i];      }  intmain()      {      	...  // Kernel invocation with N threads  VecAdd<<<1, N>>>(A, B, C);      }  CUDA – Kernele - Przykład
Dla wygody, threadIdx jest 3-elementowym wektorem, dlatego wątek może być identyfikowany poprzez 1-wymiarowy, 2-wymiarowy lub 3-wymiarowy indeks wątku, zawarty w 1-wymiarowym, 2-wymiarowym indeksie bloku. 	Bloki są organizowane w jedno- lub dwuwymiarowym gridzie (sieci) CUDA – Hierarchia Wątków
CUDA – Hierarchia Wątków - Ilustracja
CUDA – Hierarcha Pamięci
Model programowania CUDA zakłada, że wątki CUDA, są wykonywane fizycznie na innym urządzeniu, które działa jako koprocesor dla hosta. Dlatego kernele wykonują się na GPU, gdy pozostała część kodu wykonuje się na CPU Model programowania CUDA zakłada, również, że host i device (GPU) posiadają oddzieloną od siebie własną pamięć RAM. Dlatego nie można dostać się do pamięci GPU z CPU tak po prostu. Należy wykonać funkcję odpowiedzialną za kopiowanie zawartości pamięci CUDA – Heterogeniczne Programowanie
CUDA – Heterogeniczne Programowanie 						Ilustracja
Architektura CUDA jest zbudowana wokół skalowalnej tablicy wielowątkowych Strumieni Multiprocesorowych. Kiedy gridkernelu jest wywoływany bloki gridu są wyliczane i przekazywane do multiprocesora. Wątki w bloku są wykonywane równocześnie na jednym multiprocesorze, i wiele bloków może być wykonywanych równocześnie na jednym multiprocesorze CUDA - Architektura
Zamierzam zrównoleglić wyliczanie zbioru Mandelbrota na architekturze CUDA poprzez podzielenie obliczania całej płaszczyzny liczb zespolonych na fragmenty. 	Byłyby one wyliczane na przez poszczególne bloki wątków. Zrównoleglenie wyliczania zbioru 						Mandelbrota
Zrównoleglenie wyliczania zbioru 				Mandelbrota Ilustracja
	Zbiór Mandelbrota: 	http://en.wikipedia.org/wiki/Mandelbrot_set 	CUDA: 	http://www.nvidia.pl/object/cuda_home_new_pl.html Linki:
Dziękuję za uwagę!  Prezentacja dostępna pod adresem: 	http://www.slideshare.net/nowy20/generowanie-i-wizualizacja-zbioru-mandelbrota-na-cuda

Más contenido relacionado

La actualidad más candente

HSI MODEL IN COLOR IMAGE PROCESSING
HSI MODEL IN COLOR IMAGE PROCESSING HSI MODEL IN COLOR IMAGE PROCESSING
HSI MODEL IN COLOR IMAGE PROCESSING anam singla
 
INTRODUCTION TO WIRELESS NETWORKING
INTRODUCTION TO WIRELESS NETWORKINGINTRODUCTION TO WIRELESS NETWORKING
INTRODUCTION TO WIRELESS NETWORKINGDURGARAOBHARGAVI
 
Training report of C language
Training report of C languageTraining report of C language
Training report of C languageShashank Kapoor
 
Multiplexing FDM and TDM
Multiplexing FDM and TDMMultiplexing FDM and TDM
Multiplexing FDM and TDMaliahmadfarooq
 
Chapter 7 multiple access techniques
Chapter 7 multiple access techniquesChapter 7 multiple access techniques
Chapter 7 multiple access techniquesKaushal Kabra
 
Language for specifying lexical Analyzer
Language for specifying lexical AnalyzerLanguage for specifying lexical Analyzer
Language for specifying lexical AnalyzerArchana Gopinath
 
Pstn (Public Switched Telephone Networks)
Pstn (Public Switched Telephone Networks)Pstn (Public Switched Telephone Networks)
Pstn (Public Switched Telephone Networks)rahuldaredia21
 
Theory of Computation Lecture Notes
Theory of Computation Lecture NotesTheory of Computation Lecture Notes
Theory of Computation Lecture NotesFellowBuddy.com
 
2D Rotation- Transformation in Computer Graphics
2D Rotation- Transformation in Computer Graphics2D Rotation- Transformation in Computer Graphics
2D Rotation- Transformation in Computer GraphicsSusmita
 

La actualidad más candente (20)

NFA & DFA
NFA & DFANFA & DFA
NFA & DFA
 
Multi Head, Multi Tape Turing Machine
Multi Head, Multi Tape Turing MachineMulti Head, Multi Tape Turing Machine
Multi Head, Multi Tape Turing Machine
 
HSI MODEL IN COLOR IMAGE PROCESSING
HSI MODEL IN COLOR IMAGE PROCESSING HSI MODEL IN COLOR IMAGE PROCESSING
HSI MODEL IN COLOR IMAGE PROCESSING
 
Python basics
Python basicsPython basics
Python basics
 
INTRODUCTION TO WIRELESS NETWORKING
INTRODUCTION TO WIRELESS NETWORKINGINTRODUCTION TO WIRELESS NETWORKING
INTRODUCTION TO WIRELESS NETWORKING
 
Training report of C language
Training report of C languageTraining report of C language
Training report of C language
 
Chapter 1
Chapter 1Chapter 1
Chapter 1
 
Spline representations
Spline representationsSpline representations
Spline representations
 
FDMA-TDMA-CDMA
FDMA-TDMA-CDMAFDMA-TDMA-CDMA
FDMA-TDMA-CDMA
 
Computer Graphics Presentation
Computer Graphics PresentationComputer Graphics Presentation
Computer Graphics Presentation
 
Multiplexing FDM and TDM
Multiplexing FDM and TDMMultiplexing FDM and TDM
Multiplexing FDM and TDM
 
Ray tracing
 Ray tracing Ray tracing
Ray tracing
 
Chapter 7 multiple access techniques
Chapter 7 multiple access techniquesChapter 7 multiple access techniques
Chapter 7 multiple access techniques
 
Language for specifying lexical Analyzer
Language for specifying lexical AnalyzerLanguage for specifying lexical Analyzer
Language for specifying lexical Analyzer
 
Analysis of the source program
Analysis of the source programAnalysis of the source program
Analysis of the source program
 
Chapter 2 c#
Chapter 2 c#Chapter 2 c#
Chapter 2 c#
 
Huffman Coding
Huffman CodingHuffman Coding
Huffman Coding
 
Pstn (Public Switched Telephone Networks)
Pstn (Public Switched Telephone Networks)Pstn (Public Switched Telephone Networks)
Pstn (Public Switched Telephone Networks)
 
Theory of Computation Lecture Notes
Theory of Computation Lecture NotesTheory of Computation Lecture Notes
Theory of Computation Lecture Notes
 
2D Rotation- Transformation in Computer Graphics
2D Rotation- Transformation in Computer Graphics2D Rotation- Transformation in Computer Graphics
2D Rotation- Transformation in Computer Graphics
 

Generowanie i wizualizacja zbioru Mandelbrota na CUDA

  • 1. Paweł Nowak Generowanie i wizualizacja zbioru Mandelbrota na CUDA
  • 2. Zbiór Mandelbrota (żuk Mandelbrota) -podzbiór płaszczyzny zespolonej, którego brzeg jest jednym ze sławniejszych fraktali. Nazwa tego obiektu została wprowadzona dla uhonorowania jego odkrywcy, francuskiego matematyka Benoit Mandelbrota. Co to jest zbiór Mandelbrota?
  • 3. By zdefiniować zbiór Mandelbrota, zdefinujemy najpierw dla danego punktu p na płaszczyźnie zespolonej nieskończony ciąg liczb zespolonych z0, z1, z2, ... o wartościach zdefiniowanych następująco: z0 = 0 zn+1 = zn2 + p Zbiór Mandelbrota (ang. Mandelbrot Set) definiujemy jako zbiór liczb zespolonych p takich, że zdefiniowany powyżej ciąg nie dąży do nieskończoności. Zbiór Mandelbrota z matematycznego punktu widzenia
  • 4. Otóż fraktalem jest brzeg tego zbioru. W praktyce by narysować fraktale oblicza się kolejne przybliżenia zbioru, które oznacza się różnymi kolorami. I tak kolejne przybliżenia zdefiniujemy jako zbiór liczb zespolonych p takich, że: 1 przybliżenie: wszystkie punkty 2 przybliżenie: |z1| < 2 3 przybliżenie: |z1| < 2 oraz |z2| < 2 4 przybliżenie: |z1| < 2 oraz |z2| < 2 oraz |z3| < 2 ... n-te przybliżenie: |z1| < 2 oraz |z2| < 2, ... |zn-1| < 2 Gdzie w tym wszystkim fraktal?
  • 5. Jak ten fraktal wygląda?
  • 6. CUDA (ang. ComputeUnifiedDeviceArchitecture) to opracowana przez firmę Nvidia uniwersalna architektura procesorów wielordzeniowych (głównie kart graficznych) umożliwiająca wykorzystanie ich mocy obliczeniowej do rozwiązywania ogólnych problemów numerycznych w sposób wydajniejszy niż w tradycyjnych, sekwencyjnych procesorach ogólnego zastosowania. CUDA?
  • 7. Integralną częścią architektury CUDA jest oparte na języku programowania C środowisko programistyczne wysokiego poziomu, w którego skład wchodzą m.in. specjalny kompilator (nvcc), debugger (cuda-gdb, który jest rozszerzoną wersją debuggeragdb umożliwiającą śledzenie zarówno kodu wykonywanego na CPU, jak i na karcie graficznej), profiler oraz interfejs programowania aplikacji. Dostępne są również biblioteki, które można wykorzystać w językach Python, Fortran, Java, C# oraz Matlab. Pierwsze wydanie środowiska wspierało systemy operacyjne Windows oraz Linux. Od wersji 2.0 wspierany jest również Mac OS X. Jak programować na CUDA?
  • 8. CUDA C rozszerza C pozwalając programiście na definiowanie funkcji C nazywanych kernelami (kernels), które są wykonywane N razy równolegle przez N wątków CUDA Kernele są definiowane poprzez dodanie specyfikatora __global__ przy deklaracji. Wywołanie kernelu odbywa się poprzez specjalną konstrukcję wywołania funkcji z modyfikatorem <<…>> w, którym jest podana ilość bloków i wątków, które wywołują kernel Każdy wątek otrzymuje swoje specyficzne ID, które jest dostępne poprzez strukturę threadIdx CUDA – Kernele
  • 9. // Kerneldefinition __global__ void VecAdd(float* A, float* B, float*C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } intmain() { ... // Kernel invocation with N threads VecAdd<<<1, N>>>(A, B, C); } CUDA – Kernele - Przykład
  • 10. Dla wygody, threadIdx jest 3-elementowym wektorem, dlatego wątek może być identyfikowany poprzez 1-wymiarowy, 2-wymiarowy lub 3-wymiarowy indeks wątku, zawarty w 1-wymiarowym, 2-wymiarowym indeksie bloku. Bloki są organizowane w jedno- lub dwuwymiarowym gridzie (sieci) CUDA – Hierarchia Wątków
  • 11. CUDA – Hierarchia Wątków - Ilustracja
  • 12. CUDA – Hierarcha Pamięci
  • 13. Model programowania CUDA zakłada, że wątki CUDA, są wykonywane fizycznie na innym urządzeniu, które działa jako koprocesor dla hosta. Dlatego kernele wykonują się na GPU, gdy pozostała część kodu wykonuje się na CPU Model programowania CUDA zakłada, również, że host i device (GPU) posiadają oddzieloną od siebie własną pamięć RAM. Dlatego nie można dostać się do pamięci GPU z CPU tak po prostu. Należy wykonać funkcję odpowiedzialną za kopiowanie zawartości pamięci CUDA – Heterogeniczne Programowanie
  • 14. CUDA – Heterogeniczne Programowanie Ilustracja
  • 15. Architektura CUDA jest zbudowana wokół skalowalnej tablicy wielowątkowych Strumieni Multiprocesorowych. Kiedy gridkernelu jest wywoływany bloki gridu są wyliczane i przekazywane do multiprocesora. Wątki w bloku są wykonywane równocześnie na jednym multiprocesorze, i wiele bloków może być wykonywanych równocześnie na jednym multiprocesorze CUDA - Architektura
  • 16. Zamierzam zrównoleglić wyliczanie zbioru Mandelbrota na architekturze CUDA poprzez podzielenie obliczania całej płaszczyzny liczb zespolonych na fragmenty. Byłyby one wyliczane na przez poszczególne bloki wątków. Zrównoleglenie wyliczania zbioru Mandelbrota
  • 17. Zrównoleglenie wyliczania zbioru Mandelbrota Ilustracja
  • 18. Zbiór Mandelbrota: http://en.wikipedia.org/wiki/Mandelbrot_set CUDA: http://www.nvidia.pl/object/cuda_home_new_pl.html Linki:
  • 19. Dziękuję za uwagę! Prezentacja dostępna pod adresem: http://www.slideshare.net/nowy20/generowanie-i-wizualizacja-zbioru-mandelbrota-na-cuda