![見出し画像](https://assets.st-note.com/production/uploads/images/72780376/rectangle_large_type_2_a244f4511fccde6fad29b3f53e6047b9.png?width=1200)
ハードウェアを知る (4) GPU - CPU と比較して
今回は GPU について取り扱います。
GPU といえば皆さん何を思い浮かべますか? 3Dバリバリみたいな Game の世界? それとも、Deep Learning の世界? 他にもあると思います。
Graphics Processing Unit と銘打っているのに、なぜ Deep Learning なんでしょうか? 今回は特にCPUと比較してのGPUの世界を見ていきましょう。
CPU と GPU は何が違うのか?
昔のCPUはコアは1つでしたね。
![](https://assets.st-note.com/img/1646205453441-VEGuycqvL3.png?width=1200)
で、マルチコアが出てきました。
![](https://assets.st-note.com/img/1646205477694-gmLXR2b7Pb.png?width=1200)
NUMAのところで扱いましたが。CPUのコア数がもっと増えるわけですよね。
![](https://assets.st-note.com/img/1646205426221-oH1x1RgzDS.png?width=1200)
コア数がいっぱいあって、すんごい並列処理できんじゃん! と思いますよね。NUMA も出てきましたしね。64-bit CPUもスケールアウトのためでしたね。
GPUは、Graphics処理、つまり、画面のレンダリング(=描画) に最適化されて出てきた Chipset です。画面のレンダリング処理って、画素数毎に分割しやすいですよね? 1024 x 768 の画素のスクリーンであれば。これをメモリ上で保持して、デバイスにコピーするわけです。で、メモリと Chipset とでのやり取りをする際に、分割したジョブがお互いのデータに干渉しなくてよい事が多いんです。つまり並列処理に強いChipset といえます。
その結果、GPUはコア数がめちゃくちゃ多いんですよ。そして、個々の処理は単純なもので十分なんです。
![](https://assets.st-note.com/img/1646205525333-N0WmA3ljM7.png?width=1200)
こちらに、主たる違いをまとめてみました。
![](https://assets.st-note.com/img/1646205689217-wcEOWWCjoP.png?width=1200)
で、大事な点は何かというと…
CPUとは別の Chipsetつまり演算デバイスがある、という事です。
そもそもOS上では、2,000-3,000を超えるスレッドが動いています。これをなるべく手分けして処理をしたいわけです。高機能化したコンピューターでは、それが顕著なんですよね、
そこで、特にコア数の多い GPU を、Graphics以外の処理でも使えるんじゃないか? という発想につながります。これに気づいた人は本当にすごいです。そこで出てきたのが GPGPU = General Purpose GPU。つまりGPUをCPUの様な汎用的な目的で使おう、という事なんです。
GPGPUには、以下の様にいろんな SDK があります。
![](https://assets.st-note.com/img/1646205734887-diMmFPW8Ni.png?width=1200)
NVIDIA がAI企業であるかのように思っている方も多いと思います。それは事実なのですが、そもそもは Graphics 処理Chipsetを開発していた会社。同じ製品でそれ以外でも出来る事が増えた、という事ですね。
ちなみに、CUDAは、よく聞くと思いますが、NVIDIAのChipsetでしか動きません。注意してくださいね。GPUはNVIDIAさんだけが作っているわけじゃないですよーDirectCompute。これは、いろんなGPUで動きますがWindowsでしか動きません。
この話。CPUの時にも出てきましたね😊
AI と GPU の関係
この点をお話します。
Deep Learning で主に使われるネットワーク構造はニューラルネットワーク (Neural Network) です。人間の脳細胞であるシナプス同士が電気信号で通信しているそうですが。それを模倣したものです。
この下図の右側の図の様に、オレンジの入力データを下の緑に伝えていきます。じゃ、どんな計算をしているかといえば、メチャクチャざっくり言いますが内部では単純な加算と積算をしています。
緑の列数、層といってもいいでしょう。その層を増やしていってネットワークを組んだのです。その結果、層が深くなるので Deep Neural Network (DNN) というように呼ばれるようになったんですね。
![](https://assets.st-note.com/img/1646206260329-wFgHfzq51b.png?width=1200)
それぞれの「〇」の隣との関係性を見てください。そう、隣の〇との関連性は極めて低いのです。データはそれぞれで持っていますから、邪魔しあいません。画面のレンダリングと同じく並列処理がしやすいのです。
整理すると…
![](https://assets.st-note.com/img/1646206484745-dHQjSLxzyD.png?width=1200)
という事なんですよ。
ちなみに64-bit も要らない事も知っておいてください。勿論、一度にメモリ上で扱うデータ量が増えれば 64-bit が必要になるのは、CPUの64-bit の回でお話しましたね。
実はDNNでは扱うデータ型にも特徴がありました。それは殆どが浮動小数点型の数値なんです。整数である Integer ではないですね。これも GPUがもともと処理が得意だったんです。
![](https://assets.st-note.com/img/1646207344442-JRJiLjWmmS.png?width=1200)
浮動小数点のデータ型も主に32-btの単精度浮動小数点と、64-bitの倍精度浮動小数点があります。
実際にNeural Network を組む際にも、この辺りを意識して行う事はあまりないかもしれません。ただ、使えるGPUの仕様次第で、その処理能力に差が出てくることは知っておきたいですね。
まとめ
GPUは、その圧倒的コア数から、並列処理に強いことがわかりました。それが、GPGPUとして、レンダリング以外の目的でも使えるように SDK が出てきて。そして、Deep Learning での利用につながっているんですね。
これは、一歩引いた視点でみると、アーキテクチャが見えてきます。並列処理のアーキテクチャです。
NUMAもアーキテクチャですよね。
ハードウェアのアーキテクチャは、ソフトウェアにも十二分に応用できることが想像できます。