|
最近のバージョンでは VI およびアプリケーション(EXE)の実行時のパフォーマンスを上昇させるため LabVIEW のコンパイラにはより多くの最適化処理が追加されました。最適化処理の追加は LabVIEW 2009 から始まり、LabVIEW 2010 以降のバージョンでも継続して行われる予定です。コンパイラに最適化のための追加処理が加えられたために VI や EXE のランタイム時のパフォーマンスは以前のバージョンの LabVIEW より上昇します。一方で LabVIEW アプリケーションは VI のコンパイルを伴う VI 編集時に、より多くの時間を必要とするようになりました。コンパイラに最適化処理が追加されたため、コンパイル時間はより長くなり、コンパイル時の LabVIEW のメモリ使用量は上昇します。多くの VI では、この変化によるコンパイル時間やメモリ使用量への影響は無視できる程度で、違いは気付かない程度です。しかし、ブロックダイアグラムが大きいものになるにつれ LabVIEW や他のアプリケーションの通常使用に支障をきたすほどコンパイル時間が長くなったり、メモリ使用量が増加する場合が確認されました。
コンパイラの最適化における追加処理によって顕著な影響を受ける場合の参考例として、何重にもネストされたストラクチャがあります。(例:各ケースに長いスタックシーケンスのある何百ものケースがあるケースストラクチャ)一見すると PC スクリーン上ではそこまで大きい様には映りませんが、多数のノードやサブダイアグラムはコンパイル時のパフォーマンスに影響を及ぼします。
**** LabVIEW 2010 SP 1 以降のバージョンでのアップデート****
コンパイラの最適化の追加処理のために、ランタイム時のパフォーマンスは上昇しますが、コンパイル時間やメモリ使用量が増加します。この 2 つはトレードオフの関係にあります。LabVIEW 2010 から LabVIEW 2010 SP1 にかけて、コンパイラの最適化をどこまで行うかユーザが設定できる様になりました。初期設定では、ほとんど全ての VI に対して、全ての追加された最適化処理が有効です。一方でブロックダイアグラムのサイズが大きくなるにつれ LabVIEW の通常使用に支障をきたすほどコンパイル時間が長くなる場合、いくつかの最適化処理は自動的に無効にされます。この、ブロックダイアグラムのサイズを元にした最適化処理の部分的な自動無効化がどのサイズに達した場合に行われるのかをユーザが決定できる様になりました。詳細についてはLabVIEW 2010 SP1 におけるコンパイラ設定の変更方法を参照してください。
ユーザからの多くのソースコードの提供のおかげで、弊社は上記現象をより詳細に把握できました。LabVIEW 2010 SP1 へアップグレードした後も、VI の保存、コンパイル時の長時間処理、もしくは以前の LabVIEW のバージョンよりも低いパフォーマンスが確認された場合は技術サポートへの連絡をお願いしています。
根本的な解決策
LabVIEW は VI のロード時、実行時、及び保存時に必要に応じて自動的にコンパイルを行います。通常、VI の外観の以外が編集されると VI の再コンパイルのフラグが設定されます。このフラグが設定されている場合、次回の VI の実行時、もしくは保存時に VI は自動的にコンパイルされます。
この問題に対しての理想的な解決策は、単一の VI 上でのブロックダイアグラムの拡大を防ぐ様、部分ごとに適切なサブ VI を作成することです。サブ VI は呼び出し元の VI がコンパイルされるときに、一緒にコンパイルされません。よってコンパイルされる範囲が減少するので、コンパイル時間、およびメモリの使用量が減少し、保存時や実行時のパフォーマンスが上昇します。サブ VI 化することはコンパイラの最適化における時間、及びパフォーマンスの改善のみでなく VI のモジュール単位で開発を行うので VI がより管理しやすくなり、開発効率もあがります。
保存時の長いコンパイル時間を避ける方法
VI の実行矢印を故意に壊れた状態にすることで VI 保存時のコンパイルを無効にします。LabVIEW は VI が実行不可能である場合、保存時にコンパイルを行わずソースコードのみの保存を行います。よって、保存時の時間が大幅に短縮されます。この方法を最も簡単に行う方法はブロックダイアグラムの適当な位置に「和」の関数を配置し、ノードを未配線のまま放置しておいてください。VI 実行の準備完了時に「和」の関数を削除すると、実行もしくは保存する段階で初めてコンパイルされます。
メモリ不足を避ける方法
OS が LabVIEW アプリケーションに使用可能なメモリ量を拡張します。32bit Windows の場合、仮想メモリの使用を初期設定の 2GB から 3GB まで拡張することができます。さらに 64bit OS の場合 32bit アプリケーションに 4GB までの仮想メモリの使用を許可できます。
LabVIEW コンパイラのパフォーマンス改善は LabVIEW R&D の最優先事項であり、今後の継続した改善を目指しています。現時点でも今後のバージョンの LabVIEW でのコンパイル時間とコンパイルに使用するメモリ使用量を削減するための改善を続けています。この改善の一環として、コンパイル時間やメモリ使用状況が問題となり得る事を確認できるコードがある場合、ユーザからの提供をお願いしています。ユーザの協力があることでより良質の改善を短期間で提供できる可能性があります。技術サポートへのサービスリクエスト、もしくはディスカッションフォーラムの専用スレッドを通してコードを提供してください。
この内容に関して追加で質問やヘルプが必要な場合、技術サポートに問い合わせてください。
Developer Zone Tutorial: The LabVIEW Compiler - Under the Hood
Developer Zone Tutorial: NI LabVIEW 2010 Performance Details
KnowledgeBase 51QMD41C: 大規模なプログラムのパフォーマンスとメモリに関する問題
KnowledgeBase 5ER879WI: LabVIEW 2010 SP1 におけるコンパイラ設定の変更方法
|