「プログラマ初心者にもわかりやすい解説」を目標にしています。 分かりやすさとイメージを重視するため、正確じゃないことを書いています。ご理解ください。
#GPGPUとは
リンク:前回の記事をご覧ください
#GPGPUの高速の仕組みを一言で説明する
GPGPUは、GPUという機械を使ってforループを早くする仕組みです。
#GPGPUの仕組み
パソコンには「CPU」という機械と「GPU」という機械が入っています。
皆さんが普段プログラムしているソースを実行しているのは
「CPU」という機械が行っています。
GPGPUは「CPU」ではなく、「GPU」を使ったプログラムの事です。
GPUって何?という方は、今は知らなくて大丈夫です。
「普段使っているCPUとは違う機械が処理をする」ということだけ何となく覚えてください。
といってもプログラムの言語が違うだけで、
普段みなさんがやってるプログラムと大した違いはありません。
#GPGPUで高速化できる例
GPGPUはAIやビッグデータでよく使われています。
囲碁や将棋のAIも、高段位の棋士にも勝てるようになったのは
GPGPUの恩恵が大きいそうです。
どのくらい高速化されるのかは処理によりますが、イメージとしては
・CPUで数日~数ヶ月⇒GPGPU:数時間~数十時間
GPUは1000個のスレッドを使って処理を高速化しています。
リンク:前回の記事をご覧ください
GPUはそれ単体で動かすことはできません。
必ずCPUからGPU処理開始の実行命令を出します。
そのため、単純なfor文を高速化するだけでも
CPUとGPUの両方のプログラムを書く必要があります。
#GPGPUで高速化できない例
forループを早くするGPGPUですが、ファイルアクセスができません。
ファイルアクセスができるのはCPUのみだからです。
forループ中にファイルアクセスが必要な場合は、CPUで処理を工夫する必要があります。
・CPUで事前にファイルを読み込んでおく
・GPU処理が終わってから、処理結果をファイルに書きこむ
#GPGPUの対応言語
主に3Dプログラムを扱う言語が対象になります。
・WebGL、Unity、Javaなどで、GPGPU用のライブラリが用意されています
・本気で高速化する場合は、GPU専用言語のCUDA一択らしいが環境制限などがある(2020年現在)
※CUDAの場合はGPUもNVIDIA製である必要があります
#GPGPUを始める前に
GPGPUは元々、3Dの描画プログラムをAI等に流用したものです。
3Dのプログラムと聞くと、なんとなく敷居が高いイメージがありますね。
おそらく、プログラム初級者や3Dに慣れていない方のイメージよりも、ちょこっと難しいです。
一般的なUnityなどのスキルとはちょっと違い、3Dプログラム経験がある=GPGPUできる人材という訳でもないです。
難易度が高いので仕事で必要とされていないのであれば、あまり手を出すのはオススメしません。
(趣味ではオススメですよ。それなりに楽しいです!)
なぜかというと
・(業種によるが)できる人材が少ない
・開発期間が普段の開発(CPUの開発)に比べて長くなる(2倍~くらい?)
・頑張ってGPGPU化するよりPC環境やプログラムの見直しをした方が高速化される可能性もある
・というか中途半端にGPGPU化すると逆に遅くなる
からです。
人材と処理内容によりますが、
高速化するために1からGPGPUに手を出して数ヶ月2000万かけてGPGPU化するよりも、
PCのメモリ増設やHDD⇒SSDの変更などで高速化できるなら
その方がコスパが良いのではないでしょうか。
こちらの記事が参考になります。
リンク:GPGPUに手を出す前に検討すべき事について
リンク:[プログラムを高速化する話Ⅱ 〜GPGPU編〜]
(https://www.slideshare.net/KMC_JP/gpgpu-91122680)
↑チューニング前は速度が「CPU」よりも55倍遅かったらしい(内容は難しいので全部理解する必要はないです)
#求められる人材と勉強期間
・3Dの「シェーダー」を書ける、理解できる人
・積極的に知識を求められる人(プログラムの勉強に抵抗ない人)
└参考サイトが少ないのと3Dプログラムの知識が必要なため、
1からの独学だと早い人でも数週間~2ヶ月以上かかるイメージ
Qiitaを日常的に見たり、1記事でも書いたことがあるような人は概ね大丈夫じゃないでしょうか。
求められる人材が少ないと書きましたが、業種にもよると思います。
実際ゲーム業界はゴロゴロいましたし、
まあそういう人達向けの記事じゃないからいいかな。
#自分が勉強した時に参考にしたサイト
3DとGPGPUの参考にしたサイト
・元がWebGL(JavaScript)なので理解しやすい
・開発環境が用意しやすい
・3Dの基礎から学べる
・知ってる限り日本で1番WebGLについて分かりやすいサイト
リンク:wgld.org