良書 「GPUを支える技術　超並列ハードウェアの快進撃[技術基礎]」を読む

#目的

「GPUを支える技術　超並列ハードウェアの快進撃[技術基礎]」
（2017年7月13日　初版第1刷発行, 発行所　株式会社技術評論社）

この書籍は、かなりいい書籍だと思います。
しばらく、手元においておきたい書籍です。
パラパラと何度か眺めていて、気づいたこと、補足できることなどをここに記します。
また、発行(2017/7/13)以来、時間が経過しているので、その後の状況とかも記載したいと思います。

この記事で多少役立つ可能性がある項目は、以下。
　- p.207 『メモリアクセスを効率化する』:candy:

※構成の悪い記事だな。。。。（ため息）

#この書籍の良いところ

この書籍の良いところは、以下。
　- 参照している文献が参考になる。
　　→　この書籍をキーとして、参照している文献等で、知識を広げられる。

#意外と重要だと思う項
## GPUの構造
p121の「4.2GPUの構造」にて、GPUの構造の説明がある。
GPUには、同じような構成要素が沢山あることが知られているが、まず、**SM(Streaming Multiprocessor)**というのが、基本となる構成要素である。これが、例えば、GP100の場合、56個ある。このSMの中に、更に、**コア（CUDAコア）**が各々64個ある。

（出典：　https://images.nvidia.com/content/pdf/tesla/whitepaper/pascal-architecture-whitepaper.pdf　）

<img width="493" alt="sm.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/190dc8b9-3d51-cd93-a04c-6f67376b08fa.png">


## GPUの構成から演算性能を計算する
P130あたりに記載されている演算性能の計算方法を示す。単純です。

>コアとDPユニットはA×B+という積和演算を実行するので積と和が各1演算で、ピーク演算性能は**2演算/クロック**ということになります。

GP100チップの場合、

　32ビット単精度の積和演算機の数は、64CUDAコア×56個SMで、3,584個
　GPUのクロック周波数は、1,480MHz（ターボブースト時）なので、

→　ピーク演算性能は、
3,584 × 1,480 × 2 →　単位を換算して、　10.6　TFlops となります。

##p.207 『メモリアクセスを効率化する』
p.207に『メモリアクセスを効率化する』という項がある。
CPUにしても、GPUにしても、これが重要であることは、理解できる。１演算あたりのメモリバンド幅の例が、以下のように示されている。この値の逆数、「Flop/Byte」で計算される算術強度(arithetic intensity ※)を横軸にしたルーフラインモデルの説明もされている。
 ※operational intensityという言葉も代わりによく使われる。

:memo:かなり飛躍するが、高いレベルでメモリ効率を上げるのためには、高度に完成されたライブラリ等の使用が必要だと思う。この書籍では、ライブラリの話はあまりでませんが。。。

|装置|メモリバンド幅(Byte/Flop)|
|:---:|:---:|
|スパコン「京」|0.5
|NVIDIA K80 GPU|0.165|
|NVIDIA P100 GPU|0.136|

#気づいたこと、補足できること、整理できること
##処理速度と消費電力の情報
処理速度と消費電力の情報を本文から拾う

|装置|処理速度|消費電力|記載ページ/備考|
|:---:|:---:|:---:|:---|
|NVIDIA<br>Drive PX2|20TOPS|80W|p.262<br>Pascal GPU他|
|NVIDIA<br>Xavier(エグゼビア)|20TOPS|20W|p.262<br>ワンチップ|


##NVIDIA GPU
###NVIDIA GPUの製品カテゴリ
製品カテゴリは、以下のとおり。

| カテゴリ   | 説明 | 
|:------------:|:-----------|
| GeForce       | デスクトップパソコンやノートパソコン向け        |
| Quadro     | プロフェッショナル向けでワークステーションに搭載      | 
| Tesla       | スーパーコンピュータ向けの演算専用プロセッサ  ※1       | 
| Tegra       | 携帯電話やスマートフォン・タブレット端末向けのSoC（システム・オン・チップ）※2|       
(情報元（引用元）：https://ja.wikipedia.org/wiki/NVIDIA）

※1
NVIDIA Tesla はNVIDIAのHPC向けGPU製品シリーズ。GeForceやQuadroをベースとしており、NVIDIA初のGPGPU専用製品である。 
(出典：https://ja.wikipedia.org/wiki/NVIDIA_Tesla)
高性能計算、ハイ・パフォーマンス・コンピューティング（high-performance computing、HPC）は、計算科学のために必要な数理からコンピュータシステム技術までに及ぶ総合的な学問分野である。 
(出典：https://ja.wikipedia.org/wiki/高性能計算)
※2
NVIDIA Tegra（エヌビディア テグラ）は、NVIDIAによるARM系の省電力統合型プロセッサのシリーズ。スマートフォンやタブレット型コンピュータ、Nintendo Switch、nVidia Shield TV、自動車のインフォテインメントシステムなどに使用されている。 
(出典：https://ja.wikipedia.org/wiki/NVIDIA_Tegra)

###NVIDIA GPUアーキテクチャ
GPUアーキテクチャの世代の呼び名は、以下のとおり。古い順。

~~Tesla~~
Fermi(2009年)
Kepler
Maxwell
Pascal
Volta(2017年)
Turing

~~※最初を、Teslaというかは、微妙。審議中。~~
※世代というレベルにしては、細々、速すぎるペースで次のものが定義されている。

###CUDAの数学ライブラリ
p.183に『CUDAの数学ライブラリ』という項があります。ここで示されているNVIDIAのライブラリ等が、実際に、GPUの性能を出す上では重要となると思われます。

|ライブラリ名|機能|
|:----------|:----|
|cuBLAS|マトリクスやベクトルの演算|
|cuSPARSE|疎行列の演算|
|cuFFT|高速フーリエ変換|
|cuDNN|ディープラーニングの演算|
##OpenMP4.0規格
####OpenMPに関して補足する。
OpenMPは、CPUでの並列化のイメージが強いが、以下の引用(p.215)のとおり、4.0ではGPU等も想定に入っている。

>これに対してOpenMPは、GPUなどのアクセサリーが使えるように大幅な改修が加えたOpenMP4.0規格がリリースされたのは2013年7月になりました。

引用 https://en.wikipedia.org/wiki/OpenMP

>Version 4.0 of the specification was released in July 2013. It adds or improves the following features: support for accelerators; atomics; error handling; thread affinity; tasking extensions; user defined reduction; SIMD support; Fortran 2003 support. 


#発行後の状況で補足できること

##Microsoft BrainWave
####GPUを説明する本書において、対抗する？FPGAの例として、Microsoftの取り込むが示されている。それに関連する、BrainWaveに関して補足する。
本書の注記で示されているMicrosoft Catapultをベースとしたもの。

引用 https://www.itmedia.co.jp/pcuser/articles/1708/29/news100.html
>　Project BrainWaveについては、Microsoft Researchのブログで8月22日（米国時間）に紹介されている。もともとは同日に米カリフォルニア州クパチーノで開催された半導体業界の「Hot Chips」カンファレンスでの発表をベースとしており、ここではIntelの14nm製造プロセスを使った「（旧Alteraの）Stratix 10」というFPGA（Field Programmable Gate Array）によるBrainWaveのデモストレーションが披露されている。

引用 https://eventmarketing.blob.core.windows.net/mstechsummit2018-after/DA22_PDF_TS18.pdf


BrainWave(FPGA)の位置づけは、以下のように整理されている。

<pre>
                  +------------------------------------+
  +----+  +----+  |     DNN Processing Unit            | +----+
  |CPU |  |GPU |  | +------------+    +--------------+ | |ASIC|      
  +----+  +----+  | |Soft DPU    |    | Hard DPU     | | +----+
                  | | (FPGA)     |    |              | |
                  | +------------+    +--------------+ |
                  +------------------------------------+
　←←柔軟性　　　　　　　　　　　　　                      効率性→→
                    +------------+    +--------------+ 
                    |BrainWave   |    |Cerebras      |
                    |Baidu SDA   |    |Google TPU    |
                    |Deephi Tech |    |Graphcore     |
                    |ESE         |    |Grop          |
                    |Teradeep    |    |Intel Nervana |
                    |Etc         |    |Movidus       |
                    |            |    |Wave Computing|
              　    |            |    |Etc           |
                    +-----------+     +--------------+


</pre>

#まとめ
この書籍は、気に入っています。

#関連（本人）
[文献『From Model to FPGA: Software-Hardware Co-Design for Efficient Neural Network Acceleration』を読む](https://qiita.com/enoughspacefor/items/7de477dc3c1a50d36f2e)
[文献『AN ANALYSIS OF DEEP NEURAL NETWORK MODELS FOR PRACTICAL APPLICATIONS』を読む。](https://qiita.com/enoughspacefor/items/ea5a3225c6c54c469326)


#今後
また、何か関連する検討ができれば。
コメントなどあれば、お願いします。:candy: