GPUがマイニングで重宝されるのは何故？

# はじめに
この記事はメタバース関連の設備をそろえよう！と話をしていた事がきっかけでした。
GPUがグラフィック描写だけでなく、マイニング等のブロックチェーン技術で使用されてるのは何故ですか？と質問を受けた際、並列処理が出来るから…と私自身よくわかっていない返答をしてしまいました。
これからメタバース領域の勉強をしたいと考えている上でこの辺の知識も仕入れて損ではないだろうということで、なぜGPUなのか？をまとめてみました。

# GPUって？ 
グラフィックボードに搭載されているプロセッサのことですが、
取り合えずざっくりとした機能の再確認としてIT用語辞典などで確認…
> Graphics Processing Unitの略で、3Dグラフィックスを描画する際に必要な計算処理を行う半導体チップのこと。
> 高速のVRAM（ビデオメモリー）と接続され、グラフィクスを描画することに特化したプロセッサが多く集まったグラフィックボードに搭載される。
> VRAMはグラフィックボード上のGPU専用メモリーのこと。
> 最近ではGPGPU（General Purpose Computing on GPU）という新しい技術が登場し、画像処理などに限らず、CPUのように汎用的な処理を行うことができる。<br>
> 引用(https://www.otsuka-shokai.co.jp/words/gpu.html)

色々見ているとGPUはプロセッサのコアが大量に搭載されており、小さな同じ大きさのタスクを並列で処理することに特化したASICです。

3Dグラフィックスで必要となる計算について例を挙げると
・3D空間を2Dの世界に変換する座標変換
・3D空間内の光の行き先を計算する光路計算
...etc
の計算でしょうか。

![GPU概要画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524398/a47789cb-6cf5-dd8d-01b8-b50d8111b4d8.png)

調べている限りでは一定の大きさの大量の情報に対して同じ計算を並列に行っているイメージです。
最近は技術の進歩により柔軟な動作が可能になり、GPGPUとして普遍的な計算にGPUを用いることができるようになったみたいです。


# CPUって？

  改めてCPUについてちょっと調べてみようと思い、調べてみました。
> 中央演算処理装置。コンピューターの中枢部分にあたり、各種装置を制御したり、データを処理する。コンピューターの基本性能を決める重要なパーツ。CPUは入力装置などから受け取ったデータを解釈して演算し、結果を出力装置などで出力する。CPUの機能をひとつのLSI（大規模集積回路）にしたものを、特にマイクロプロセッサーと呼ぶ。代表的なものには、インテル社のCore 2 Duo、Core i7や、AMD社のPhenom、Turionなどがある。<br>
> 引用(https://yougo.ascii.jp/caltar/CPU)

CPUが主に行っているPCの制御処理については
・記憶装置(メモリ)にため込まれた様々な命令(入力装置や出力装置、記憶装置まで様々…)を
解釈し、命令に沿ったアクションを行う。
これはコンピュータの5大装置の"制御"と"演算"の2つの役割を担っている。

![CPU概要画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524398/c7dd688c-d74a-81a3-c4f9-c0bb385365b5.png)


つくりの違いを確認して纏めてみると、
* CPUは複雑な命令を連続して柔軟に実行できる。
* GPUは一定の粒度のデータに対して並列に実行することができる。

これらをもとにして、次にブロックチェーン技術において
マイニングなどで行われている計算について調べてみました。

# マイニングにおける計算
ここではようやくマイニングで行われている計算について視点を向けます。
まずはマイニングにおけるブロックチェーン技術を調べました。

## ブロックチェーンとは？
ブロックチェーンとは、仮想通貨の取引履歴をブロックと呼ばれる一定の集合体として扱い、過去と未来の取引履歴をハッシュ値でつなげたものです。

![ブロックチェーン概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524398/16a60925-19ea-c5c6-33be-d6a7afcb7fe2.png)

取引履歴に改ざんが入った場合次のブロックが抱えるハッシュ値に差異が生まれ、
改ざんが行われることを検知できる。という仕組みです。

改ざんが検知されると、分散型台帳によっていろいろな人が持っている正しいブロック情報で上書きされるという仕組みです（かなりおおざっぱです。）

ここでマイニングでユーザが行っているのは何か？という話に進みます。
マイニングで行われていることは、"ナンス値の発見"です。

## ナンス値とは？
ナンス（nonce）とは「number used once」の略で、「一度だけ使われる数」という意味の言葉です。

ランダムな32ビットの値であるナンスを用意し、ハッシュ関数を使ってハッシュ値を生成します。
生成されたハッシュ値がある値より小さい（値の先頭に0が何個もならぶ）数値になるまでナンスを変えながら同じ計算を繰り返します。

なぜこのような事を行うかというと、ハッシュ値にはルールが設けられています。
例えば"先頭3桁を0とするハッシュ値"となるハッシュ値しかブロックに利用できない。などです。

## マイニングで行ってる計算
結論を述べると、ブロックを成立させるためルールに当てはまるハッシュ値を生み出すナンス値が出るまで計算することがマイニングで行われている計算です。
この"ルールに当てはまるナンス値"は一つのブロックに対して早い者勝ちで決まるようで、
そのため並列計算に強いGPUが利用されているということなのでしょう。


# 終わりに
今回はGPUとCPUについて、またマイニングとGPUの親和性について記事を書かせていただきました。
マイニングについてGPUが重宝されているのは、進歩によりGPGPUとして普遍的な計算が可能になり、ルールに当てはまるハッシュ値を導出するナンス値を見つける事にGPUの並列性の強みが合致していたからでした。
かなり簡略にしているので間違った書き方等あるかもしれません。
マイニングやブロックチェーンについては今後もう少し詳しく調査し、記事にしてみたいと思います。

### 主な参考記事
 - [CPU と GPU の比較: 違いを理解する](https://www.intel.co.jp/content/www/jp/ja/products/docs/processors/cpu-vs-gpu.html)
- [[5分で理解]GPUとは？CPUとの違いや性能と活用](https://www.kagoya.jp/howto/engineer/hpc/gpu1/)
- [紙と鉛筆でビットコインをマイニング：1日に0.67ハッシュ](https://postd.cc/mining-bitcoin-with-pencil-and-paper/)
- [4枚の図解でわかるブロックチェーン技術](https://persol-tech-s.co.jp/corporate/security/article.html?id=69)
- [ブロックチェーンの仕組み](https://www.nttdata.com/jp/ja/services/blockchain/002/)