細粒マルチスレッドと粗粒マルチスレッドの主な違いは、細粒マルチスレッドではスレッドがラウンドロビン方式で命令を発行し、粗粒マルチスレッドではスレッドがストールするまで命令を発行することである。
マルチスレッドとは、1つのプロセス内で複数のスレッドを独立に実行すること。
これらのスレッドはプロセス資源を共有することができる。
マルチスレッドには、細粒度マルチスレッドと粗粒度マルチスレッドの2種類があります。
細粒度マルチスレッドとは
細粒度マルチスレッドでは、スレッドは連続したサイクルでラウンドロビン方式で実行されます。
例えば、コンピュータが1クロックサイクルに1命令発行できるとします。
A、B、Cは3つのスレッドです。
これらのスレッドの最初の12サイクルは次のようになります。
これらのスレッドが細粒度マルチスレッドによって命令を発行する方法は以下の通りです。
図2: 細粒度マルチスレッド
各スレッドは最初の命令を発行する。
スレッドAは2番目の命令を発行する。
B1とB2の間には、2クロックの間隔が必要です。
すでに2クロックが経過しているので、スレッドBの2番目の命令を発行することができる。
そして、このプロセスは継続されます。
Coarse Grained Multithreading とは
粗視化マルチスレッドでは、スレッド発行が停止するまで、スレッドが命令を発行します。
この処理をストール(stall)とも呼びます。
ストールが発生すると、次のスレッドが命令を発行し始めます。
このとき、スレッドの切り替えにより1サイクルが失われる。
細粒度マルチスレッドと同じ例で考えてみましょう。
図3:粗視化マルチスレッド
スレッドAは第1命令と第2命令を発行する。
命令の発行が停止すると、スレッドBに制御が移り、1クロックのロスが発生する。
スレッドBは1つ目の命令を実行し、停止する。
その後、制御がCに移り、1クロック分のロスが発生します。
スレッドCは4つの命令を発行した後、命令の発行を停止する。
その後、制御がAに戻り、1クロック分のロスが発生し、スレッドAは3番目と4番目の命令を発行する。
そして、このプロセスが続く。
細粒度マルチスレッドと粗粒度マルチスレッドの違い
定義
細粒度マルチスレッドとは、スレッド命令によるキャッシュミスがあってもスレッド間の切り替えが行われるマルチスレッド機構です。
一方、粗粒度マルチスレッドとは、実行中のスレッドが失速した場合にのみ切り替えが発生し、クロックサイクルが無駄になるマルチスレッド機構です。
したがって、ここが細粒マルチスレッドと粗粒マルチスレッドの大きな違いとなる。
効率性
効率も細粒度マルチスレッドと粗粒度マルチスレッドの違いのひとつです。
粗い粒度のマルチスレッドは細かい粒度のマルチスレッドよりも効率が悪く、スレッド間の切り替え時にサイクルのギャップやロスが発生するためです。
必須スレッド
さらに、粗粒度のマルチスレッドでは、細粒度のマルチスレッドと比較して、CPUをビジー状態に保つために必要なスレッドの数が少なくなります。
結論
マルチスレッドには、細粒度マルチスレッドと粗粒度マルチスレッドという2つの方式があります。
細粒マルチスレッドと粗粒マルチスレッドの主な違いは、細粒マルチスレッドではスレッドがラウンドロビン方式で命令を発行し、粗粒マルチスレッドではスレッドがストールするまで命令を発行することである。