クーダでハニワ / MIERUNE BBQ #12
by
MIERUNE
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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