SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

SK rkp des 2013
SK rkp des 2013SK rkp des 2013
SK rkp des 2013Jusa Erza
 
ベンチャーマネージャーのマニュアル③基本動作
ベンチャーマネージャーのマニュアル③基本動作ベンチャーマネージャーのマニュアル③基本動作
ベンチャーマネージャーのマニュアル③基本動作禎庸 長村
 
Speed Torque Characteristics of BLDC Motor with Load Variations
Speed Torque Characteristics of BLDC Motor with Load VariationsSpeed Torque Characteristics of BLDC Motor with Load Variations
Speed Torque Characteristics of BLDC Motor with Load Variationsijtsrd
 
Evaluasi Peraturan Per-UU-an di Daerah
Evaluasi Peraturan Per-UU-an di DaerahEvaluasi Peraturan Per-UU-an di Daerah
Evaluasi Peraturan Per-UU-an di DaerahTri Widodo W. UTOMO
 
Question bank Electrical Machine
Question bank Electrical MachineQuestion bank Electrical Machine
Question bank Electrical MachineDhaval Solanki
 
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ーRecruit Lifestyle Co., Ltd.
 
複雑ネットワーク勉強会 二部グラフの基礎と応用 20120208
複雑ネットワーク勉強会  二部グラフの基礎と応用 20120208複雑ネットワーク勉強会  二部グラフの基礎と応用 20120208
複雑ネットワーク勉強会 二部グラフの基礎と応用 20120208Hiroko Onari
 
Air事業のデザイン組織とデザイナー
Air事業のデザイン組織とデザイナーAir事業のデザイン組織とデザイナー
Air事業のデザイン組織とデザイナーRecruit Lifestyle Co., Ltd.
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
 

Was ist angesagt? (9)

SK rkp des 2013
SK rkp des 2013SK rkp des 2013
SK rkp des 2013
 
ベンチャーマネージャーのマニュアル③基本動作
ベンチャーマネージャーのマニュアル③基本動作ベンチャーマネージャーのマニュアル③基本動作
ベンチャーマネージャーのマニュアル③基本動作
 
Speed Torque Characteristics of BLDC Motor with Load Variations
Speed Torque Characteristics of BLDC Motor with Load VariationsSpeed Torque Characteristics of BLDC Motor with Load Variations
Speed Torque Characteristics of BLDC Motor with Load Variations
 
Evaluasi Peraturan Per-UU-an di Daerah
Evaluasi Peraturan Per-UU-an di DaerahEvaluasi Peraturan Per-UU-an di Daerah
Evaluasi Peraturan Per-UU-an di Daerah
 
Question bank Electrical Machine
Question bank Electrical MachineQuestion bank Electrical Machine
Question bank Electrical Machine
 
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
 
複雑ネットワーク勉強会 二部グラフの基礎と応用 20120208
複雑ネットワーク勉強会  二部グラフの基礎と応用 20120208複雑ネットワーク勉強会  二部グラフの基礎と応用 20120208
複雑ネットワーク勉強会 二部グラフの基礎と応用 20120208
 
Air事業のデザイン組織とデザイナー
Air事業のデザイン組織とデザイナーAir事業のデザイン組織とデザイナー
Air事業のデザイン組織とデザイナー
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
 

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