クーダでハニワ / MIERUNE BBQ #12
by
MIERUNE
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
©OpenStreetMap contributors Hidekazu Takami クーダでハニワ 1
Slide 2
Slide 2 text
©Project PLATEAU / MLIT Japan へっぽこ プログラマーの悩み 2
Slide 3
Slide 3 text
©Project PLATEAU / MLIT Japan 3 PCで を描きたい!!
Slide 4
Slide 4 text
©Project PLATEAU / MLIT Japan 4 をめちゃ高速で!!
Slide 5
Slide 5 text
©Project PLATEAU / MLIT Japan 5 のであれば
Slide 6
Slide 6 text
©Project PLATEAU / MLIT Japan 自己紹介 6 で
Slide 7
Slide 7 text
©Project PLATEAU / MLIT Japan 7 格闘家[ミルコ・クロコップ
Slide 8
Slide 8 text
©Project PLATEAU / MLIT Japan = 8 Compute Unified Device Architecture NVIDIA CEO ジェンスン・フアン⽒
Slide 9
Slide 9 text
©Project PLATEAU / MLIT Japan 9 = マンデルブロ集合
Slide 10
Slide 10 text
©Project PLATEAU / MLIT Japan 自己紹介 10 で
Slide 11
Slide 11 text
©OpenStreetMap contributors へっぽこプログラマ NVIDIAのGPUを使ってCUDAを利用し、マンデルブロ集合を描くとめちゃくちゃ早く作成できるよ でもNVIDIAのGPUお値段高いけどね、革ジャンさん安く売ってよ、おねがい!! 11
Slide 12
Slide 12 text
©Project PLATEAU / MLIT Japan 高見 英和 自己紹介 Takami Hidekazu ● おもにバックエンド担当することがおおい ● 動的型付け言語(Pythonなど)はやや苦手 ● ロードバイクとバイオリンが趣味かな~ 12
Slide 13
Slide 13 text
©Project PLATEAU / MLIT Japan 自己紹介 13 マンデルブロ集合(ハニワ)
Slide 14
Slide 14 text
©Project PLATEAU / MLIT Japan 14 わからん!!
Slide 15
Slide 15 text
©Project PLATEAU / MLIT Japan 15 複素数
Slide 16
Slide 16 text
©Project PLATEAU / MLIT Japan 16 実数(実部)+虚数(虚部) 1+1i
Slide 17
Slide 17 text
©Project PLATEAU / MLIT Japan 17 0 1 ▼ 2 -2 √2 ▼ 実数
Slide 18
Slide 18 text
©Project PLATEAU / MLIT Japan 18 0 2i -2i 1+1i 虚数
Slide 19
Slide 19 text
©Project PLATEAU / MLIT Japan 19 0 2i -2i 1+1i -2 2
Slide 20
Slide 20 text
©Project PLATEAU / MLIT Japan 20 漸化式 (ぜんかしき)
Slide 21
Slide 21 text
©Project PLATEAU / MLIT Japan 21 Z0 =0 Zn+1 =Zn +C 2 ここに複素数の値をいれる (描画位置の値) 1+1i
Slide 22
Slide 22 text
©Project PLATEAU / MLIT Japan 22 Z0 =0 Z2 =(1+1i)+(1+1i) 2 Z1 =0+(1+1i) 2
Slide 23
Slide 23 text
©Project PLATEAU / MLIT Japan 23 1000回繰り返して Zの値の絶対値が2を超えると黒 それ以外は白とする 1+1i 0.4+0.6i
Slide 24
Slide 24 text
©Project PLATEAU / MLIT Japan 24 つまり
Slide 25
Slide 25 text
©Project PLATEAU / MLIT Japan 25 1000X1000画像を作るには 1000x1000x1000回(十億回)の計算が必要になる
Slide 26
Slide 26 text
©Project PLATEAU / MLIT Japan 26 0 2i -2i 1+1i -2 2 0.0 0.1000 1000.0 1000.1000
Slide 27
Slide 27 text
©Project PLATEAU / MLIT Japan 27 マンデルブロ集合はフラクタルな図形なので どこまでも拡大できる 10万倍 縦横幅2 縦横幅0.00002
Slide 28
Slide 28 text
©Project PLATEAU / MLIT Japan 28 色の付け方 HSV色空間 ● 色相 (Hue) ● 彩度 (Saturation, Chroma) ● 明度 (Value, Brightness) 漸化式で2を超えるまでの 回数(n)を360度で表現する 色が決定する
Slide 29
Slide 29 text
©Project PLATEAU / MLIT Japan 29 サンプルコード C++ X軸ループ、Y軸ループ、漸化式ループの3重ループ
Slide 30
Slide 30 text
©Project PLATEAU / MLIT Japan 30 サンプルコード C++
Slide 31
Slide 31 text
©Project PLATEAU / MLIT Japan 31 高速にするにはGPU(CUDA)を使う
Slide 32
Slide 32 text
©Project PLATEAU / MLIT Japan 32 GPUで三角形ばっかり描くのはもったいない。 そのスーパーな並列処理をなんにでも 使えるようにしたら?
Slide 33
Slide 33 text
©Project PLATEAU / MLIT Japan 33 CUDAコアを作って▲もかけるが、 いろいろな計算もできるようにした! しかもライブラリーも作ったよ! (cuda toolkit)
Slide 34
Slide 34 text
©Project PLATEAU / MLIT Japan 34 CUDAコア SM
Slide 35
Slide 35 text
©Project PLATEAU / MLIT Japan 35
Slide 36
Slide 36 text
©Project PLATEAU / MLIT Japan 36 GPUのプログラムって難しいイメージ?
Slide 37
Slide 37 text
©Project PLATEAU / MLIT Japan 37 実はそんなに難しくない
Slide 38
Slide 38 text
©Project PLATEAU / MLIT Japan 38 CPUで利用されるメモリとGPUで利用されるメモリは別の場所にあるため ホスト側のメモリ情報をデバイス側へ転送する カーネルを使って同時並行処理する デバイス側のメモリ情報をホスト側に戻す
Slide 39
Slide 39 text
©Project PLATEAU / MLIT Japan 39 カーネルとは各CUDAコアで実行する関数みたいなもの カーネルがCUDAコアで同時に実行される ブロックとスレッドの指定でカーネルが処理するピクセルが決まる (今回の場合)
Slide 40
Slide 40 text
©Project PLATEAU / MLIT Japan 40 サンプルコード(cuda)
Slide 41
Slide 41 text
©Project PLATEAU / MLIT Japan 41 サンプルコード(cuda)
Slide 42
Slide 42 text
©Project PLATEAU / MLIT Japan 42 速度比較 使用PC CPU:Intel i5 12400 6コア 12スレッド GPU:NVIDIA GTX1070 CUDAコア 1920基 フ ル
Slide 43
Slide 43 text
©Project PLATEAU / MLIT Japan 43 RTX4090 10/20日現在 CUDAコア 16,384基!! GTX1070 CUDAコア 1929基
Slide 44
Slide 44 text
©Project PLATEAU / MLIT Japan 44 ● スケール: ○ 0.00002 縦横 ● 中心位置: ○ 0.743643135 X ○ 0.131825963i Y
Slide 45
Slide 45 text
©Project PLATEAU / MLIT Japan 45 速度比較 CPUシングルスレッド:10070.4 ms(10s) GPU(CUDA) :75.90 ms (0.8s) CPUマルチスレッド :1352.06 ms (1s) Intel i5 (12スレッド) (GTX1070 1920コア)
Slide 46
Slide 46 text
©Project PLATEAU / MLIT Japan 46 ms 132倍 18倍
Slide 47
Slide 47 text
©OpenStreetMap contributors まとめ 47
Slide 48
Slide 48 text
©OpenStreetMap contributors ● PCでハニワ(マンデルブロ集合) を描きたい ● CUDAを使うとマンデルブロ集合は高速に描ける ● CUDAのプログラミングは意外と簡単 ● CPU側とGPU側のメモリは別なのでデータの受け渡しが必要 ● NVIDIAさんもっとGPU安く売ってくれないですかね? 48
Slide 49
Slide 49 text
©OpenStreetMap contributors ● Rust de ハニワ ● https://github.com/Guarneri009/rust-mandelbrot ● Haskell de ハニワ ● https://github.com/Guarneri009/haskell-mandelbrot 49
Slide 50
Slide 50 text
©OpenStreetMap contributors 終わり ます 50