doridoridoriand’s diary

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

GPUコアに関して

前回コード書かずに終わったので今回はコードを書いて示しながら説明したいですね(希望)

ちなみに前回の話はこちら

CUDAコアに関して

GPUはSM(Streaming Multiprocessor)というのが内蔵されており、この中に

  • 命令ユニット
  • 演算器(ALU(Arithmetic Logic Unit)とか)
  • レジスタ
  • キャッシュ(シェアード・コンスタン・テクスチャメモリ)

が入っています。ちなみにTesla世代とFermi世代で相当構成が変わっているので、(FermiにはSMの外にL1, L2キャッシュがあるなど) 共通部分のみ記述しています。

さらにこのSMの下に、SP(Scalar Processor)と呼ばれる、ALUをまとめたものが存在します。

コードを書くにあたってBlockとThreadという概念も登場するのですが、後で説明します。

ここでTeslaK20のGPU情報を見てみましょう

--- General Information for device 0 ---
Name:  Tesla K20c
Compute capability:  3.5
Clock rate:  705500
Device copy overlap:  Enabled
Kernel execution timeout :  Disabled
--- Memory Information for device 0 ---
Total global mem:  5368512512
Total constant Mem:  65536
Max mem pitch:  2147483647
Texture Alignment:  512
--- MP Information for device 0 ---
Multiprocessor count:  13
Shared mem per mp:  49152
Registers per mp:  65536
Threads in warp:  32
Max threads per block:  1024
Max thread dimensions:  (1024, 1024, 64)
Max grid dimensions:  (2147483647, 65535, 65535)

この情報を見てみるとSMが13基あることがわかります。

そして見慣れないThreadとBlock, Gridが登場しました。(他にも見慣れない単語はたくさんあるのですが、とりあえず笑)

Thread

実際に計算を行う部分。つまりSPのことです

Block

Threadを束ねたもの。 Max threads per block: 1024と書かれているとおり、TeslaK20では1024個のThreadを1Blockとしています

Grid

Blockを束ねたものです

・・・

さっきの出力結果を見てみると、以下のような記述に疑問を持つと思われます。

Max thread dimensions:  (1024, 1024, 64)
Max grid dimensions:  (2147483647, 65535, 65535)

なんでカンマで区切られているんだ??そしてdimensionsってなんだ??

dimensionという単語から推測出来る通り、これは次元を持ちます

  • (i)ならば一次元
  • (i, j)ならば二次元
  • (i, j, k)ならば三次元

という記述をすることが可能です。

計算したい内容によって次元数は変わりますし、処理内容によっては二次元・三次元を一次元のように書くことが可能です

さて、コードを示そうと思いましたが、書くのにめっちゃ疲れたので今日はもうやめますorz

正直文字だけでは非常にわかりにくいと思われるので、また作図して載せます