2011年2月27日日曜日

グリッド、ブロック、スレッド

「CUDA BY EXAMPLE」の5.2.1節にある「長いベクトルの和」の項が分かりにくかったので覚えとして。

51ページ: この変数はすべてのブロックに対する定数であり、ブロックの各次元のスレッド数を含んでいます。 原文にあたってないけど、この部分は意味は多分: 「この変数は全てのブロックについて同じ(一定=constant)であり、ブロックを構成する3次元に並んだスレッドたちの各次元のスレッド数をメンバとして持っています。」

まとめて書かれていないようだけど、どうやらグリッドとブロックとスレッドの関係はこんな感じらしい:

  • グリッドは、2次元にならんだブロックたちである。変数 gridDim(41-42ページ)は、その各次元(x方向およびy方向)のブロック数を持っている。gridDim.x がx方向のブロック数、gridDim.y がy方向のブロック数である。
  • ブロックは、3次元にならんだスレッドたちである。変数 blockDim は、その各次元(x, y, z方向)のスレッド数を持っている。blockDim.x がx方向のスレッド数、などとなる。

ついでに小さいところ。 50ページ:複数のブロックとスレッドを使う場合、インデックスを計算する方法は、2次元のインデックス空間を線形空間に変換するための標準的な手法に似てきます。 「線形空間」は「1次元 (linear) 空間」と読んだほうが分かりやすい。