[解決済み] ストリーミングマルチプロセッサ、ブロックとスレッド(CUDA)
質問
CUDA コア、ストリーミング マルチプロセッサ、およびブロックとスレッドの CUDA モデルの関係はどうなっていますか。
何が何にマッピングされ、何がどのように並列化されるのか。また、ブロック数とスレッド数のどちらを最大化するのが効率的なのか。
私の現在の理解では、マルチプロセッサごとに 8 つの Cuda コアがあり、すべての Cuda コアは一度に 1 つの Cuda ブロックを実行することができ、そのブロック内のすべてのスレッドはその特定のコアで直列に実行されます。
これは正しいのでしょうか。
どのように解決するのですか?
スレッド/ブロックのレイアウトの詳細については CUDAプログラミングガイド . 特に、第4章に記載されています。
CUDAアーキテクチャは、マルチスレッドのストリーミングマルチプロセッサ(SM)のスケーラブルなアレイを中心に構築されています。ホスト CPU 上の CUDA プログラムがカーネル グリッドを呼び出すと、グリッドのブロックが列挙され、利用可能な実行能力を持つマルチプロセッサに分配されます。スレッドブロックのスレッドは1つのマルチプロセッサ上で同時に実行され、複数のスレッドブロックは1つのマルチプロセッサ上で同時に実行することができます。スレッドブロックが終了すると、空いたマルチプロセッサで新しいブロックが起動されます。
各 SM には 8 つの CUDA コアがあり、いつでも 32 スレッドの 1 つのワープを実行しています。したがって、ワープ全体に対して 1 つの命令を発行するのに4クロック サイクルが必要です。任意のワープ内のスレッドはロックステップで実行されると仮定できますが、ワープ間で同期をとるには、次のように使用する必要があります。
__syncthreads()
.
関連
-
CUDAドライバのバージョンが、CUDAランタイムのバージョンに対して不足している問題
-
CUDAのcudaMalloc()のパラメータを理解する方法
-
cudaMallocとcudaMallocPitchの秘密を教えます。
-
MatlabからCUDAへの呼び出しの概要(Windows, Ubuntu)
-
CUDAアトミック操作
-
CUDA プログラミングのエラー処理
-
[解決済み] CUDAバージョンの取得方法を教えてください。
-
CUDA (V) deviceQueryを使ったGPUのプロパティ
-
[解決済み】DockerコンテナからGPUを使用する?
-
[解決済み] nvccとNVIDIA-smiが示す異なるCUDAのバージョン
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
CUDAドライバのバージョンが、CUDAランタイムのバージョンに対して不足している問題
-
cudaMallocとcudaMallocPitchの秘密を教えます。
-
MatlabからCUDAへの呼び出しの概要(Windows, Ubuntu)
-
CUDAアトミック操作
-
CUDA プログラミングのエラー処理
-
CUDA (V) deviceQueryを使ったGPUのプロパティ
-
[解決済み】DockerコンテナからGPUを使用する?
-
[解決済み] nvccとNVIDIA-smiが示す異なるCUDAのバージョン
-
[解決済み] グローバル機能とデバイス機能の違い
-
[解決済み] NVIDIAとAMDの比較:GPGPUパフォーマンス