詳細
アプリケーションが、ランタイム中に高レベルのカーネル ストールをレポートしました。これは、アプリケーションの全体的なパフォーマンスに影響する可能性があります。
説明
ランタイムによりレポートされるストールには、次の 3 つの種類があります。
- [Intra-Kernel Dataflow Stalls (%)]
- カーネル内のデータ ストリーミング中にストールした時間の実行時間に対する割合。これらのストールは、内部データフロー ブロックのストール信号のいずれかが High になったときのサイクルです。たとえば、内部ブロック、プロデューサーおよびコンシューマーはそれぞれ II=1、II=2 でパイプライン処理されます。これは、プロデューサーが 1 クロック サイクルおきにしかデータを生成できないのに対し、コンシューマーは各サイクルでデータを受信できるため、50% のストールとしてレポートされます。
- [External Memory Stalls (%)]
- CU 外のメモリ転送でストールした時間の実行時間に対する割合。これは、複数のポートが同時にメモリにアクセスすることで競合が発生し、転送が停止してしまうことが原因です。
- [Inter-Kernel Pipe Stalls (%)]
- CU 外とのデータ ストリーミング中にストールした時間の実行時間に対する割合。これらは、カーネル間でフルの FIFO に書き込んだり、カーネル間で空の FIFO から読み込んだりすることが原因です。
回避策
次を実行すると、ストールが改善される可能性があります。
- [Intra-Kernel Dataflow Stalls]
-
- HW エミュレーションを実行すると、階層的なストール信号を使用するため、より詳細な情報を得ることができます。
- カーネルの内部ブロック/ループ内の FIFO サイズを増加します。
- [External Memory Stall]
- アプリケーションで可能な場合は、アクセスのためのメモリ ポート数を増加します。
- [Inter-Kernel Pipe Stalls]
- HW エミュレーションを実行すると、階層的なストール信号を使用するため、より詳細な情報を得ることができます。
- カーネル間の FIFO の深さを増加すると、パフォーマンスが向上します。
- プロデューサーの FIFO への書き込みよりコンシューマーの読み出しの方が速い場合は、コンシューマーがスターブ状態にならないよう、プロデューサーのスループットを向上させて、FIFO を満たすようにします。
- プロデューサーの FIFO への書き込みよりコンシューマーの読み出しの方が遅い場合は、コンシューマーのスループットを向上させ、プロデューサーが FIFO フルのために待たされることがないようにします。