1. ホーム
  2. cuda

[解決済み] ストリーミングマルチプロセッサ、ブロックとスレッド(CUDA)

2023-04-19 10:25:36

質問

CUDA コア、ストリーミング マルチプロセッサ、およびブロックとスレッドの CUDA モデルの関係はどうなっていますか。

何が何にマッピングされ、何がどのように並列化されるのか。また、ブロック数とスレッド数のどちらを最大化するのが効率的なのか。


私の現在の理解では、マルチプロセッサごとに 8 つの Cuda コアがあり、すべての Cuda コアは一度に 1 つの Cuda ブロックを実行することができ、そのブロック内のすべてのスレッドはその特定のコアで直列に実行されます。

これは正しいのでしょうか。

どのように解決するのですか?

スレッド/ブロックのレイアウトの詳細については CUDAプログラミングガイド . 特に、第4章に記載されています。

CUDAアーキテクチャは、マルチスレッドのストリーミングマルチプロセッサ(SM)のスケーラブルなアレイを中心に構築されています。ホスト CPU 上の CUDA プログラムがカーネル グリッドを呼び出すと、グリッドのブロックが列挙され、利用可能な実行能力を持つマルチプロセッサに分配されます。スレッドブロックのスレッドは1つのマルチプロセッサ上で同時に実行され、複数のスレッドブロックは1つのマルチプロセッサ上で同時に実行することができます。スレッドブロックが終了すると、空いたマルチプロセッサで新しいブロックが起動されます。

各 SM には 8 つの CUDA コアがあり、いつでも 32 スレッドの 1 つのワープを実行しています。したがって、ワープ全体に対して 1 つの命令を発行するのに4クロック サイクルが必要です。任意のワープ内のスレッドはロックステップで実行されると仮定できますが、ワープ間で同期をとるには、次のように使用する必要があります。 __syncthreads() .