0

常駐ワープの数も、ユーザーが指定したヒープサイズによって制限されますか?

たとえば、各スレッドが1 MBのメモリを割り当てる必要があり、ヒープが合計32 MBに設定されている場合(cudaLimitMallocHeapSizeは、スレッドごとではなくカーネル起動ごとのヒープ使用量に使用されると想定していますが、それは正しいですか?)。デバイスで許可されるワープは1つだけであるというのは本当ですか?

4

1 に答える 1

1

カーネルの起動(またはワープやブロックの発行)は、ヒープサイズによって制限されません。代わりに、発行されたスレッドの数(スレッドごとのmallocに達したが、対応する空きではない)回数がスレッドごとに要求された割り当てを満たすことができない場合、カーネルの起動は失敗します。ヒープメモリ割り当てのセクションを参照することをお勧めしますCUDACプログラマーガイドの スレッドごとの割り当てのサンプルコードがそのセクションに記載されており、この動作を自分で証明するためにそのコードを簡単に変更できます。ヒープサイズと起動されるスレッド(またはブロック)の数を調整するだけで、ヒープ制限に達したときの動作を確認できます。はい、cudaLimitMallocHeapSizeは実際にはデバイスコンテキスト全体に使用されるため、cudaDeviceSetLimit()への関連する呼び出しの後に行われるすべてのカーネル起動に適用されます。スレッドごとの制限ではありません。また、割り当てのオーバーヘッドがあることにも注意してください。ヒープサイズを128MBに設定しても、128MBすべてが後続のデバイスmalloc操作に使用できるという意味ではありません。デバイスのmalloc操作はCC2.0以降でのみ可能であることに言及することも役立つ場合があります。

于 2012-10-31T03:31:08.083 に答える