2012-08-22 45 views
9

フェルミGPUで起動できるスレッドの最大数について混乱します。1つのCUDAカーネルで開始できるスレッドの最大数

私のGTX 570デバイスのクエリでは次のことが言います。

Maximum number of threads per block:   1024 
    Maximum sizes of each dimension of a block: 1024 x 1024 x 64 
    Maximum sizes of each dimension of a grid:  65535 x 65535 x 65535 

私の理解から、私は上記のステートメントを理解する:私たちはほとんどの65536個のブロックで起動することができCUDAカーネルの

。起動された各ブロックには、1024スレッドの までを含めることができます。したがって、原則として、最大65536 * 1024(= 67108864)のスレッドを起動できます。

これは間違いありませんか?私のスレッドがたくさんのレジスタを使用するとどうなりますか?スレッド数のこの理論上の最大値にはまだ到達できますか?

CUDAカーネルを作成して起動した後、私が起動したスレッドとブロックの数がであり、確かにがインスタンス化されていることがわかります。私はGPUがいくつかのジャンクを計算するのをやめようとしたり、奇妙なことに、その特定のカーネルよりも多くのスレッドをインスタンシエートしてしまえば、奇妙な動作をしたくないという意味です。

+0

これはあなたを助けるかもしれません:http://stackoverflow.com/questions/2392250/understanding-cuda-grid-dimensions-block-dimensions-and-threads-organization-s – user1154664

答えて

17

CUDAカーネルでは、最大65536個のブロックを起動できます。起動された各 ブロックには最大1024個のスレッドを含めることができます。したがって、原則として、 まで65536 * 1024(= 67108864)のスレッドを起動できます。

これは間違っています。最大65535 x 65535 x 65535ブロックのグリッドを起動することができ、各ブロックはブロックあたり最大1024個のスレッドを持ちますが、スレッドリソースの制限によって、ブロックあたりのスレッドの総数がこの最大値未満に制限される場合があります。

スレッドがロットレジスタを使用する場合はどうなりますか?我々はまだ このスレッドの数の理論的な最大に達することができるでしょうか?

いいえ、この場合、ブロックごとに最大スレッド数に達することはできません。 NVIDIA CUDAツールキットの各リリースには、制限ブロックサイズに対するレジスタ圧の影響を確認するために使用できる占有計算機スプレッドシートが含まれています。

また、CUDAカーネルを書いて起動した後、どのように私は私が立ち上げたスレッドとブロックの数が実際 がインスタンス化されている ことを知っています。私はGPUにいくつかの迷惑メールを計算させたくない、あるいは behaceという奇妙なことに、特別なカーネルで よりも多くのスレッドをインスタンシエートしてしまえば奇妙なことです。

無効な実行コンフィギュレーション(ブロックサイズまたはグリッドサイズが正しくない)を選択した場合、カーネルは起動せず、ランタイムはcudaErrorInvalidConfigurationエラーメッセージを発行します。 cudaPeekAtLastError()cudaGetLastError()という標準を使用して、カーネルの起動状況を確認することができます。

関連する問題