4

CUDAのプログラミング構造について勉強していたのですが、勉強して感じたことは、ブロックとスレッドを作成した後、この各ブロックが各ストリーミング マルチプロセッサに割り当てられます (たとえば、14 個のストリーミング マルチプロセッサを持つ GForce 560Ti を使用しているため、一度に 14 個のブロックをすべてのストリーミング マルチプロセッサに割り当てることができます)。しかし、このようないくつかのオンライン資料を調べていると、次のようになります。

http://moss.csc.ncsu.edu/~mueller/cluster/nvidia/GPU+CUDA.pdf

1 つのマルチプロセッサ上で複数のブロックを同時に実行できることが言及されています。私は基本的に、ストリーミング マルチプロセッサでのスレッドとブロックの実行について非常に混乱しています。ブロックの割り当てとスレッドの実行が完全に任意であることは知っていますが、ブロックとスレッドのマッピングが実際にどのように行われるかを知りたいので、同時実行が可能になります。

4

1 に答える 1

6

ストリーミング マルチプロセッサ (SM) は、 Hypter-Threadingに似たプロセスであるHardware Multithreadingを使用して、一度に複数のブロックを実行できます。

CUDA C プログラミング ガイドでは、セクション 4.2 で次のように説明しています。

4.2 ハードウェアのマルチスレッド化

マルチプロセッサによって処理される各ワープの実行コンテキスト (プログラム カウンター、レジスタなど) は、ワープの存続期間全体にわたってオンチップで維持されます。したがって、ある実行コンテキストから別の実行コンテキストへの切り替えにはコストがかかりません。命令発行のたびに、ワープ スケジューラは、次の命令を実行する準備ができているスレッド (ワープのアクティブなスレッド) を持つワープを選択し、それらのスレッドに命令を発行します。 .

特に、各マルチプロセッサには、ワープ間で分割された 32 ビット レジスタのセットと、スレッド ブロック間で分割された並列データ キャッシュまたは共有メモリがあります。

特定のカーネルのマルチプロセッサ上に常駐して一緒に処理できるブロックとワープの数は、カーネルが使用するレジスタと共有メモリの量、およびマルチプロセッサで使用可能なレジスタと共有メモリの量によって異なります。常駐ブロックの最大数と、マルチプロセッサごとの常駐ワープの最大数もあります。これらの制限と、マルチプロセッサで使用可能なレジスタと共有メモリの量は、デバイスの計算能力の関数であり、付録 F に記載されています。少なくとも 1 つのブロックを処理するためにマルチプロセッサごとに使用可能なレジスタまたは共有メモリが十分でない場合、カーネルの起動に失敗します。

于 2012-08-31T10:03:10.930 に答える