- リンクを取得
- メール
- 他のアプリ
こんにちはドルフィンシステム福島です。
今日はLabVIEWプログラミングの話題です。
SDRプログラミングに見られる多くの形態は、PCが接続したソフトウェア無線機からIQデータを取得し、信号処理を行います。この処理の中で「配列の結合」という処理がよく出てきます。2つの配列を一つにしたり、配列の先頭や末尾にデータを付加したり、色々なところで行われる処理です。
LabVIEWで配列結合ができる関数はいくつかあるのですが、使い方によって数倍の動作速度の開きが出ることが分かりました。
今回はこれを紹介します。
LabVIEWで配列を追加・結合する関数
LabVIEWで配列を結合・追加する関数は、
- 配列に挿入
- 配列連結追加
の2つがあります。
私の場合は「配列連結追加」をメインに使ってますが、恐らく多くの方も使っていると思います。
配列連結追加は、指定した2つ以上の配列を結合します。
配列の挿入は、指定した配列の指定位置に配列を挿入します。
位置を指定しなければ末尾に結合します。
2つの関数とも実行した結果は以下の様になります。
配列の後ろに追加する
まず同じ長さの2つの配列を結合する実行時間を計測し、2つの関数で比較します。
その結果は下表の通りです。
配列連結追加と配列の挿入の速度差を倍率で表現してます。倍率が1以上になると「配列の挿入」が高速です。
データ個数10は、Int32の10ヶの要素を持つ配列2つを結合し、10+10=20の配列にします。
100なら100+100=200にします。
この結果を見ると、データ個数200ヶ以下の結合までは「配列連結追加」の方が高速です。
ですが200以上の要素を持つ配列の結合は「配列の挿入」の方が高速に動作しています。要素数が増えて行くにつれて差は小さくなりますが概ね「配列の挿入」が高速です。
ただU8→I32→DBLとデータタイプのビット幅が増えれば増えるほど差が開きにくくなっています。
データ個数 | 倍率(U8) | 倍率(I32) | 倍率(DBL) |
10 | 0.61 | 0.57 | 0.58 |
100 | 0.89 | 0.82 | 0.85 |
200 | 1.1 | 1.04 | 1.03 |
500 | 1.72 | 1.55 | 1.51 |
1000 | 2.56 | 2.36 | 1.77 |
10000 | 9.12 | 1.45 | 1.05 |
100000 | 3.71 | 1.37 | 1.09 |
1000000 | 2.51 | 1.18 | 0.98 |
10000000 | 2.09 | 1.03 | 0.91 |
小さなデータを配列の末尾に付加する
上では、同じ要素数の配列を結合しましたが、今回は4バイトのデータを配列に結合した場合の時間を計測しました。
結果を見るとすべての要素数において「配列連結追加」の方が高速です。
データ個数 | 倍率(U8) | 倍率(I32) | 倍率(DBL) |
10 | 0.6 | 0.6 | 0.6 |
100 | 0.6 | 0.6 | 0.7 |
200 | 0.5 | 0.6 | 0.5 |
500 | 0.6 | 0.5 | 0.5 |
1000 | 0.7 | 0.5 | 0.6 |
10000 | 0.6 | 0.7 | 0.7 |
100000 | 0.7 | 0.7 | 0.6 |
1000000 | 0.6 | 0.8 | 0.7 |
10000000 | 0.7 | 0.6 | 0.6 |
小さなデータを配列の先頭に付加する
次に、4バイトのデータを配列の先頭に結合した場合の時間を計測しました。こちらの方は効果がてきめんで、要素数が200以上は「配列の挿入」の方が数倍高速です。
データ個数(DBL) | 倍率(U8) | 倍率(I32) | 倍率(DBL) |
10 | 0.6 | 0.6 | 0.6 |
100 | 0.9 | 0.8 | 0.8 |
200 | 1.1 | 1.4 | 1.3 |
500 | 2.1 | 1.8 | 1.9 |
1000 | 3.1 | 2.7 | 2.4 |
10000 | 5.2 | 15.3 | 3.5 |
100000 | 5.1 | 22.8 | 2.8 |
1000000 | 4.4 | 18.2 | 2.2 |
10000000 | 2.3 | 7.5 | 2 |
まとめ
- LabVIEWで配列を結合・追加する関数は「配列に挿入」、「配列連結追加」の2つがある
- 同じ要素数の配列を結合する場合で要素数が200以上の場合は、「配列の挿入」の方が高速。ただしDBLで1M以上は「配列連結追加」の方が早い。
- 配列末尾に小さなデータ(ここでは4要素)を付加する場合は「配列連結追加」の方が高速
- 配列末尾に小さなデータ(ここでは4要素)を付加する場合で要素数が200以上の場合は「配列の挿入」の方が圧倒的に高速
今回はLabVIEWの配列のメモリ管理に関してのドキュメントが見当たらなかったので、LabVIEWのメモリ管理については踏み込みませんでした。今後そのようなドキュメントがあれば深く見ていきたいと思います。
配列の結合は結構な割合で使用する関数です。
今まで「配列連結追加」ばかり使用していましたが「配列の挿入」も使いたいと思います。
こういう細かな工夫を積み重ねて出来るだけパフォーマンスの高いソフトウェアをお客さまにお納めしたいと思います。
以上、ドルフィンシステム福島でした。
- リンクを取得
- メール
- 他のアプリ
コメント
コメントを投稿