06-13-2021 02:12 AM
DAQボード(PXIe-6363)から波形をサンプリングして、加工した配列をテキストファイルで出力したいと考えています。使用しているPCは64bit、LabVIEWは32bitです。
希望としては、倍精度の8192点X3376点X2(55,296,000点)をファイル出力したいのですが、現在ファイル出力の関数とループで、メモリが一杯になっています。
最低でも、8192点X3376点(27,648,000点)の配列を出力したいのですが、ファイル出力に使っている、スプレッドシートに文字列を書き込む.viで「メモリが一杯です。」というエラーが出ます。ファイル出力できる上限は8192点X1900点(170MB)でした。
次に、ファイル出力の関数を取り除いた場合、8192点X4000点ほどで今度はループに「メモリが一杯です。」とエラーが出ます。
プログラムの中の変数は出来るだけ小さいデータタイプにしています。
出力前に倍精度から単精度に変換してもデータ量は変わりませんでした。
これだけのデータ量をファイル出力できる方法をご存知の方いらっしゃいましたら、ご教示いただけると幸いです。
解決済! 解決策の投稿を見る。
06-13-2021 02:59 AM
こんにちは。
viを拝見しました。確認したいことがあります。
「Do you want to save this spectrum?」というYesNoダイアログまではメモリ不足で停止しないで動作しますでしょうか?メモリ不足が起こらないでここまで来る場合はCSVファイルへ保存するところを工夫すれば出来る可能性があります。ダイアログが表示できずメモリ不足が起こる場合は、トップのviの作り方を大幅に見直す必要があります。
〇メモリ不足を起こさずダイアログ表示までくる場合
Write Delimited Spreadsheet (DBL).viを実行するときにメモリ不足が起こっていると思います。工夫して大きなCSVを作る方法があります。
〇ダイアログを表示する前にメモリ不足を起こす場合
最上位viがとても大きいのでメモリー効率が非常に悪い作りとなっています。強引な言い方ですが、ブロックダイアグラムに見える線、表示器、制御器すべてにデータのコピーがあると思ってください。同じ機能の部分は積極的にSub.vi化するなど処理後はどんどんメモリーを解放してくようにしないと大きなデータを使うアプリは難しくなってきます。
もし、この状態であれば方法は2つ。ブロックダイアグラムを作り直すかLabVIEWの64BIT版をインストールする。なお64bitLabVIEWは英語版のみになります。
06-13-2021 06:26 AM
こんにちは
nakarikoさんの文章をよく見直すとWrite Delimited Spreadsheet (DBL).viでメモリ不足になっているようですね。ごめんなさい。
サンプル作ってみました。Write Delimited Spreadsheet (DBL).viと丸っと入れ替えてみてください。ちょっと遅いですが動くと思います(多分)
Write Delimited Spreadsheet (DBL).viは入力された2Dの数値配列をスプレッドシートに変換するとき、すべての2D_DBLデータを文字列に変換しています。テキスト文字列は非常に大きいサイズになってしまうのでここでパンクしてしまいます。
送りましたサンプルは数値配列を1行づつ文字列に変換して、ちまちま連結させていく作りにしています。
実際は千行くらいは一度に文字列に変換しても問題ないので、ループの中にある配列の抜き出し部分を工夫して高速化に挑戦してみてください。
06-14-2021 05:48 AM
SuuuSanさん
とても丁寧なアドバイスありがとうございます。
Write Delimited Spreadsheet.viについて、いただいたサンプルで改善したいと思います。
ただ、データ出力の段階でクリアできても目標のデータ数を出力するには、ループでエラーが出てきてしまっているので、SuuuSanさんのご指摘を考えるとメイン.viを改良しなくてはいけないのかなと思います。
まず、64bit版にしてみようと思いますが、サブvi化させるのほかにメモリを減らせる対処はありますでしょうか?
また、初心者質問で申し訳ないのですが、実行するたびにエラーが吐き出されるポイントがきつくなっているのは、やはりプログラムの中で実行するたびにメモリが埋まっていってしまっているからでしょうか?PCを再起動すると元に戻るのですが、プログラム上で対処できる方法がありましたら、こちらも併せてお教えいただけますと幸いです。
06-14-2021 06:33 AM
https://zone.ni.com/reference/ja-XX/help/371361R-0112/lvconcepts/vi_memory_usage/
リンク先にviがメモリをどのように使っているか説明があります。
こちらを参考にして最適化してみてください。
06-16-2021 10:29 PM
SuuuSanさん
LabVIEWを64bit版にして、ご指摘通り改善したら希望のデータ数で出力できました。
ありがとうございました。