主要内容

関数memcpyを使用したベクトルの代入に対する生成コ,ドの最適化

[ベクトルの割り当てに対してmemcpyを使用]パラメ,タ,を使用して,ル,プを関数memcpyの呼び出しで置き換えることで,ベクトルの割り当ての生成コ,ドを最適化できます。大規模なデ,タセットの場合,関数memcpyのほうがル,プ制御による要素割り当てよりも効率的です。この最適化によって実行速度が向上します。

[ベクトルの割り当てに対してmemcpyを使用]パラメ,タ,を選択すると,関連パラメ,タ,[memcpyしきい値(バaaplト)]が有効になります。このパラメ,タ,によって,関数memcpyの呼び出しで生成コ,ドのルプを置き換えるときの配列の最小サズをバト単位で指定できます。詳細にいては,使用memcpy进行向量赋值およびMemcpy阈值(字节)を参照してください。この最適化を使用するかどうかを決定する際,

  • タ,ゲットが関数memcpyをサポ,トすることを確認します。

  • たとえば选择ブロックの使用など,大量のデータを移動するためにモデルが信号ベクトルの割り当て(Y =表达式など)を使用するかどうかを判断します。

この最適化を適用するには,次のようにします。

  1. 最適化された割り当てを評価するためのベースラインを構築するために,最初にこの最適化なしでコードを生成して実行速度を測定することを検討します。

  2. [ベクトルの割り当てに対してmemcpyを使用]を選択し,[memcpyしきい値(バaaplト)]の設定を検証します。この設定は,既定の設定では,関数memcpyの呼び出しでルプを置き換えるときの配列の最小サズは64バトになっています。アプリケーションの信号ベクトルの割り当てで使用される配列サイズ、およびしきい値選択に影響を与えるターゲット環境の考慮事項に基づき、既定の設定をそのまま使用するか、別の配列サイズを指定します。

  3. コドを生成し,ベスランまたは以前の反復に対する実行速度を測定します。最適な結果が得られるまで,手順2および3を反復します。

メモ

memcpyの最適化は特定の条件では発生しません。他の最適化のほうがmemcpyの最適化よりも優先順位が高い場合や,生成コードがs函数ブロックに関連付けられているTLCファイルなどの目标语言编译器(TLC)コードから生成されている場合などです。

メモ

嵌入式编码器®ソフトウェアのライセンスがある場合,コード置換ライブラリ(CRL)を使用して,生成モデルコードで使用するために関数memcpyの独自のカスタム実装を実現できます。詳細にいては,内存功能代码替换(嵌入式编码)を参照してください。

モデル例

[ベクトルの割り当てに対してmemcpyを使用]パラメーターの使用による生成ベクトル割り当てコードへの結果を調べるには,信号ベクトル割り当てを生成するモデルを作成します。以下に例を示します。

  1. ブロック,ブロックおよび选择器ブロックを使用して,次のモデルを作成します。

  2. モデルエクスプロ,ラ,を開き,三机一体およびIn2ソ,スブロックに対して[信号属性]を設定します。各ブロックにいて,[端子の次元][1100]に,[デ,タ型]int32に設定します。変更を適用し,モデルを保存します。この例では,モデルの名前はvectorassignです。

  3. 各选择器ブロックに対して,[applerンデックス]パラメ,タ,を1:50に設定します。[入力の端子サ电子邮箱ズ]パラメ,タ,をOne hundred.に設定します。

コ,ドの生成

  1. [ベクトルの割り当てに対してmemcpyを使用]パラメ,タ,は,既定の設定でオンになっています。パラメ,タ,をオフにするには,[最適化]ペ电子邮箱ンに移動して,[ベクトルの割り当てに対してmemcpyを使用]パラメ,タ,をクリアします。

  2. [コンフィギュレ,ションパラメ,タ,]ダ,[コ,ド生成][レポ,ト]ペ电子邮箱ンに移動し,[コ,ド生成レポ,トを作成]パラメ,タ,と[レポ,トを自動的に開く]パラメ,タ,を選択します。次に[コ,ド生成]ペ@ @ンに移動して[コ,ド生成のみ]オプションを選択し,モデルのコ,ドを生成します。コ,ド生成が完了すると、HTML コード生成レポートが表示されます。

  3. HTMLコ,ド生成レポ,トで,vectorassign.cセクションをクリックし,モデルのステップ関数を検査します。ル,プを使用してベクトル割り当てが実装されていることに注意してください。

    /*模型步长函数*/ void vectorassign_step(void) {int32_T i;For (i = 0;I < 50;i++){/*输出端口:'<根>/Out1'合并:*输入端口:'<根>/In1' */ vectorassign_Y。Out1[i] = vectorassign_U.In1[i];/*输出端口:'<根>/Out2'合并:*输入端口:'<根>/In2' */ vectorassign_Y。Out2[i] = vectorassign_U.In2[i];}}

最適化を使用したコ,ドの生成

  1. [コンフィギュレションパラメタ]ダアログボックスの[最適化]ペ电子邮箱ンに移動し,[ベクトルの割り当てに対してmemcpyを使用]オプションをオンにします。[memcpyしきい値(バaaplト)]オプションを既定の設定の64のままにします。変更を適用して,モデルのコ,ドを再生成します。コ,ド生成が完了すると、HTML コード生成レポートが再表示されます。

  2. HTMLコ,ド生成レポ,トで,vectorassign.cセクションをクリックし,モデル出力関数を検査します。今度は関数memcpyの呼び出しを使用してベクトル割り当てが実装されていることに注意してください。

    /*模型步函数*/ void vectorassign_step(void){/*输出端口:'<根>/Out1'合并:*输入端口:'<根>/In1' */ memcpy(&vectorassign_Y. In1)着干活[0],&vectorassign_U。三机一体[0], 50U * sizeof(real_T)); /* Outport: '/Out2' incorporates: * Inport: '/In2' */ memcpy(&vectorassign_Y.Out2[0], &vectorassign_U.In2[0], 50U * sizeof(real_T)); }

参考

関連するトピック