CUDAIntro
8/21 スレッドとスレッドブロック(2/3)

【テロップ】
※各テロップ文字をクリックすると該当の場所がピンポイントで閲覧できます。



【ノート】
GPUでは、大量のスレッドが同時に並列計算をすることにより、高速化をはかります。さきほどの図面の生徒がスレッドに相当します。複数のスレッドがまとまってブロックを構成します。これをスレッドブロックといいます。 ここでは、32個のスレッドからスレッドブロックが構成されています。また、ブロックが4個あると仮定しています。すなわち、スレッドの総数は128個となります。 つまり、配列のサイズが128、の計算に適したスレッドの構成になっています。 スレッドブロック内には32個のスレッドがあるので、ブロック内のスレッド番号が分かったとして、全体の中でのスレッド番号はどのように計算するのでしょうか? 例えば、ブロック2の12番目のスレッド考えます。 このスレッド番号は、2個めのブロックなので、32に2をかけ、それに12を加算することで、スレッド番号は76であることが分かります。 では、ブロック1の2番目のスレッドはどうでしょうか。 このスレッド番号は、1個めのブロックなので、32に1をかけ、それに2を加算することで、スレッド番号は34になります。 最後のスレッド番号はどうでしょうか。 3個めのブロックなので、32に3をかけ、それに31を加算することで、スレッド番号は127になります。 また、最初はどうでしょうか。 0個めのブロックなので、32に0をかけ、それに0を加算することで、スレッド番号は0になります。 このように、各スレッドは自分のスレッド番号を計算し、その番号に対応した配列要素の計算を行います。反対にいうと、配列のサイズと同じ個数のスレッドを生成させてGPUでの計算を行います。