Simulinkを用いた足し算の高速化

조회 수: 14 (최근 30일)
Koji
Koji 2018년 6월 18일
댓글: Koji 2018년 6월 27일
MATLAB/Simulinkを用いて、符号なし16bit整数値(0~65535)同士のすべての組み合わせで足し算の確認を高速に行いたいと思い、ブロック図を作成しました。現状では数時間かかってしまいますが、5分ほど(C言語でコンパイル実行した場合と同等の速度)で計算を完了したいと思っております。どうすればこのSimulinkブロックを高速で実行できますでしょうか。もしくは、他の方法がありますでしょうか。
実装方法について述べます。片方の入力値をCounter Free Runnningのサンプル時間1で生成しています。もう片方の入力値も同様にCounter Free Runningで生成していますが、こちらはサンプル時間を2^16(=65536)としています。これを2^32サンプル時間行うことで、すべての符号なし16bit整数値の組の足し算を実装しました。
Simulinkのブロック図は添付の通りです。
お手数をおかけしますが、ご回答宜しくお願いいたします。

채택된 답변

Naoya
Naoya 2018년 6월 27일
スカラの加算処理を 2^32 サンプルずつ、シリアルに処理しますので、ご報告頂いたレベルの計算時間が予想されます。 モデルを変更せずに高速化させる方法としては、「アクセラレータモード」や「ラピッドアクセラレータモード」など考えられますが、今回のモデルについてはいずれも劇的な効果は望めません。
なお、Simulink の 信号処理系のオプション製品である DSP System Toolbox と呼ばれる製品をお持ちの場合は、フレームベースの処理を行うことができ、あるフレームサイズごとにベクトル化して並列に計算を行い、処理を高速化することも可能です。
ご参考までとなりますが、フレームベース処理については、 下記 DSP System Toolbox に詳細が説明されます。
DSP System Toolbox がない環境での考えられる方法としては、予め、信号をベクトル化して処理を行うのは如何でしょうか?
下記は検討モデルの一例キャプチャとなります。
uint16加算対象の片側のブロックを [0:65535] としたベクトルを Constant ブロックとして定義します。 もう片方の uint16加算対象のブロックを Counter Free-Running ブロックとします。 それぞれサンプリング時間を一致させ、Counter Free-Running が 65535 に到達するまでのシミュレーション時間を設定します。
ロギングのサイズが大きいため、To File ブロックとして、MATLAB のワークスペース上ではなく、直接、ファイルへ出力するようにします。
こちらの処理では、およそ数十秒で処理を行うことができます。
  댓글 수: 1
Koji
Koji 2018년 6월 27일
ご回答ありがとうございました。
ご提案頂いたベクトル化について検討いたします。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 信号の生成에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!