ランタイム比は、合計ランタイム比が 1 未満の場合に AI エンジン ツールで複数の AI エンジン カーネルを 1 つの AI エンジンに柔軟に配置できるようにするユーザー指定制約です。カーネルのランタイム比は、次の式で計算できます。
ランタイム比 = (カーネルの 1 回の実行にかかるサイクル数)/(サイクル バジェット)
サイクル バジェットは、カーネルの 1 回の実行に許容されるサイクル数で、システムのスループット要件によって決まります。
カーネルの 1 回の実行にかかるサイクル数は、設計の初期段階で見積もることができます。たとえば、カーネルにパイプライン処理可能なループが含まれており、各サイクルでその量のデータを処理できる場合、カーネルの 1 回の実行にかかるサイクル数は次のように見積もることができます。
同期バッファーの同期 + 関数の初期化 + ループ カウント * ループの各反復のサイクル数 + ループのプリアンブルおよびポストアンブル
注記:
同期バッファーの同期 + 関数の初期化には、インターフェイスの数に応じて数十サイクルかかります。パフォーマンスをターゲットにする場合は、この点を考慮しておく必要があります。
カーネルの 1 回の実行にかかるサイクル数は、ベクター化コードが使用可能になったときに aiesimulator
でプロファイリングすることも可能です。
複数の AI エンジン カーネルが 1 つの AI エンジンに配置され、1 つずつ順に実行される場合、マルチレート処理がない限り、すべてのカーネルは graph::run
の各反復で 1 回ずつ実行されます。これは次を意味します。
-
graph::run
の各反復 (またはシステム要件によって平均) で AI エンジン ランタイムの割合が割り当てられている場合 (ランタイム制約で指定)、カーネルのパフォーマンス要件を満たすことができます。 -
graph::run
の 1 回の反復では、カーネルの実行にランタイム制約で指定された割合よりも時間がかかることはありません。そうでない場合、同じ AI エンジンに配置されているほかのカーネルのパフォーマンスに影響する可能性があります。 - 複数のカーネルの合計ランタイム比が 1 未満の場合でも、それらのカーネルが 1 つの AI エンジンに配置されるとは限りません。AI エンジン カーネルの AI エンジンへのマップには、ハードウェア リソースも影響します。たとえば、複数のカーネルを 1 つの AI エンジンに配置できるようにするには、十分なプログラム メモリが必要です。また、ストリーム インターフェイスが使用可能であることも、複数のカーネルを 1 つの AI エンジンに配置できるようにするのに必要です。
- 複数のカーネルを 1 つの AI エンジンに配置すると、リソースを節約できる可能性があります。たとえば、同じ AI エンジンにあるカーネル間のバッファーは、ピンポン バッファーではなくシングル バッファーです。
- パフォーマンスは、データがカーネルで使用可能かどうか、およびグラフに入出力されるデータのスループットにも影響されるので、カーネルのランタイム比を大きくしても、カーネルまたはグラフのパフォーマンスが向上するとは限りません。ランタイム比を必要以上に大きく設定すると、リソースの使用が非効率なものになる可能性があります。
- ランタイム比を小さくしても、カーネルのパフォーマンスが AI エンジンの指定の割合に制限されるわけではありません。たとえば、AI エンジンにカーネルが 1 つだけの場合、ランタイム比の設定にかかわらず、すべてのデータが使用可能になるとカーネルはすぐに実行されます。
- グラフ API は異なるグラフを個別に制御する必要があるので、異なる最上位グラフにあるカーネルを同じ AI エンジンに配置することはできません。
- ランタイム比は、使用される AI エンジンだけでなく、カーネル間のデータ通信配線にも影響するので、できるだけ正しく設定してください。ランタイム比は、消費電力の見積もりなど、ほかのデザイン フローにも影響する可能性があります。