メモリ バッファーの割り当ておよび割り当て解除により、DDR コントローラーでメモリが分割されることがあります。これにより、計算ユニットが論理的には並列実行できるはずなのに、最適なパフォーマンスが得られない可能性があります。
この問題は、異なる計算ユニットに対して複数の pthread が使用されており、スレッドでカーネルがエンキューされるたびに異なるサイズのデバイス バッファーが多数割り当てられ、解放される場合によく発生します。この場合、タイムライン トレースでカーネル実行間にギャップが表示され、プロセスがスリープ状態になっているように見えます。
ランタイムで割り当てられる各バッファーは、ハードウェアで連続している必要があります。大型メモリの場合、多数のバッファーの割り当ておよび割り当て解除が発生すると、その空間が空くのを待機する時間が長くなることがあります。これは、デバイス バッファーを割り当て、カーネルの異なるエンキュー間で再利用すると回避できます。
メモリの最適化の詳細は、バースト読み出しおよび書き込み を参照してください。