doridoridoriand’s diary

主に技術的なことを書いていく予定(たぶん)

GPUのまとめ1

自分だけ研究室の中で違うことをしているので、EvernoteやQiitaの非公開に載せているけどちゃんと人の目に晒すものとしてまとめてみる。どうせそのうち卒研とかでまとめるわけだし。 そして誰か僕に知恵を授けてください(笑)

そもそもGPGPUとは

GPGPU(General-Purpose computations on Graphics Processing Units) 直訳すると グラフィック処理装置で行われる汎用的な計算(あってるかなw)となる。 となると、『つか今までGPU上での計算は汎用的な計算ではなかったの?? 』という疑問が上がっていると思われる。

そもそも初期のグラフィックカードを扱う手段はOpenGLDirectXと言ったAPIを使用してしかグラフィックカードをやりとりが出来なかったことが大きく起因している。もしグラフィックカード上で足し算をさせようと考えた時、あくまでもグラフィック処理 つまりレンダリングしているかのような処理を書いて計算させる必要があった。

つまり、超大雑把にいうと、

1 + 2 = 3

ではなく

赤 = 1, 青 = 2, 紫 = 3

と最初に定義し、

赤 + 青 = 紫

を実行する必要があった。また計算自体をシェーディング言語(まあ計算方式を最適化したりするなら使うしか無いよね)で記述するなどの必要があり敷居があまりにも高かった。

まあ当然といえば当然なんだけどこんなことやってらんねーよとなるのが普通で、一部の奇特な方々にしか広まっていなかった。 そこで登場したのがCUDAとなる。2007年らしい。

CUDAアーキテクチャーについて

一番大きなところをかいつまんで言うと、 CUDA未対応のGPUコアでは単精度浮動小数点演算がIEEEの仕様(IEEE 754)を満たさないので、それを満たすようにALU(Arithmetic Logic Unit)を改良する必要があった。 またグラフィックカードの共有メモリ(VRAMとか言われるやつですね)にCPU側からアクセス出来るように改良したものとなる。

ま、ふーん感じで終わったと思いますがw 次回から実際にコードを示して行こうと思います(文章書く量みじけーなとか言わないでねw)

参考文献

(markdownに埋め込んでるせいでうまく横並びになってくれないorz 使ってるHUGOのテンプレちょいカスタマイズしよう(そのうち))