Simulink では、Simulink シミュレーション中にサイズ (1 つの次元の要素数) を変更可能な信号は可変サイズ信号と呼ばれます。Model Composer で AI エンジン デザインをモデル化する際の可変サイズ信号の重要性を理解するため、一連の入力値から偶数を出力するカーネルを考えてみます。
void even_calc(input_window_int32 * in, output_stream_int32 * out) {
int32 val,temp;
for (unsigned i=0; i<4; i++) {
window_readincr(in,val);
if(val % 2 == 0) {
int32 temp = val;
writeincr(out,temp);
}
}
}
入力は int32
型のウィンドウで、出力は同じデータ型のストリームです。これを Simulink でモデル化すると、呼び出しごとに生成されるデータ サンプル数が異なることがわかります。
入力のウィンドウ サイズが 4
で、カーネルに供給される入力が [1 -2 3 -4 5 -6 7 8 9 10 12 14 5 7
9 13]
であるとします。
出力のサイズが動的に変化する理由を理解するため、シミュレーションを段階的に実行します。
最初のシミュレーション ステップでは、AI エンジン カーネルは 4 つの値 1,-2,3,-4
を消費し、入力値 1,-2,3,-4
の偶数値である 2 つの値 [-2,-4]
を出力します。2 番目のシミュレーション ステップでは、カーネルは次のウィンドウ入力 [5,-6,7 ,8]
を消費し、出力は -6,8
となります。3 番目の入力 [9,10,12,14
] に対しては、出力は [10,12,14
] です。最後の入力 5,7,9,13
には偶数がないため、出力は空になります。
まとめると、出力サイズは次のようになります。
- 最初のシミュレーション ステップでは
2
。 - 2 番目のシミュレーション ステップでは
2
。 - 3 番目のシミュレーションステップでは
3
。 - 4 番目のシミュレーション ステップでは
0
。
つまり、呼び出しごとに生成されるデータ サンプルのサイズは異なり、出力が生成されないこともあります。Model Composer でこの動作をモデル化するには、Simulink の可変サイズ信号を使用できます。ただし、シミュレーション中に次元の数を変更することはできません。可変サイズ信号には、最大信号サイズがあります。この例では 4
です。
先ほどの図では、Simulink の可変サイズ信号は、通常の信号と区別するため、太い線で示されています。可変サイズ信号の詳細は、次のサイトを参照してください。