G80 は、SM ごとに 768 スレッドのコンテキストを同時に保持し、それらの実行をインターリーブします。これが、CPU と GPU の主な違いです。GPU は、他のスレッドからの計算によって一部のスレッドのメモリ アクセスを隠すディープ マルチスレッド プロセッサです。スレッド実行のレイテンシーは、CPU と GPU がスレッドのレイテンシーではなくスレッドのスループットに合わせて最適化されている場合よりもはるかに高くなります。対照的に、CPU はアウトオブオーダーの投機的実行を使用して、1 つのスレッドの実行遅延を減らします。スレッド スケジューリングのオーバーヘッドを削減するために GPU で使用される手法がいくつかあります。たとえば、GPU はスレッドを波面のワープと呼ばれるより粗いスケジュール可能な要素にグループ化し、ワープのスレッドを SIMD で実行します。GPU スレッドは同一であるため、SIMD モデルに適しています。プログラマの目には、
CPU コアで使用されるスレッドは、動的スケジューリングによってさまざまな実行ユニットを満たすために使用されます。CPU スレッドは必ずしも同じタイプではありません。これは、スレッドが浮動小数点でビジー状態になると、他のスレッドが ALU のアイドル状態を検出する可能性があることを意味します。したがって、これらのスレッドの実行は並行して行うことができます。コアごとに複数のスレッドが維持され、さまざまな実行ユニットが満たされ、アイドル ユニットが効果的に防止されます。ただし、動的スケジューリングは、電力とエネルギー消費の面でコストがかかります。したがって、メーカーは CPU コアごとにいくつかのスレッドを使用します。
質問の 2 番目の部分への回答: GPU のスレッドはハードウェアによって (SM ワープ スケジューラごとに) スケジュールされ、OS やドライバーでさえスケジューリングに影響しません。