NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

メモリが足りないと表示される

250×250のDBLデータをForループで300回計算して出力しようとすると、Forループの出口で
「この作業を完了するためにはメモリが足りません」とダイアログが立ち上がり、
エラーとなってしまいます。
使用しているPCは3GBのメモリーを積んでおり、ウィンドウズのタスクマネージャーで見る限り、
メモリの量はまだ余裕があるように見受けられます。
これはLabVIEWのプログラム上の制限なのでしょうか。
それともPCの設定の問題なのでしょうか。
原因と対策に関し、推測でも良いのでご指導いただけると助かります。
よろしくお願いいたします。
0 件の賞賛
メッセージ1/6
11,444件の閲覧回数
いつもお世話になっております。
日本ナショナルインスツルメンツ技術部のタンと申します。
 
Forループで300回計算して出力を「指標付け」の出力トンネルで出力しているでしょうか。指標付け出力配列のサイズが大きくなる場合は、”メモリ不足”エラーが発生されることがあります。LabVIEWでは、メモリサイズの指定は自動的に振り分けられているため、ループの出力トンネルやシフトレジスタなどで、大きなデータを扱う際は”メモリ不足”が発生してしまいます。データが大きい場合は、一回一回のループで発生するデータをファイルに落としておくことをお勧めします。
 
ファイル書き込みに関しては、ヘルプ →サンプル検索(NIサンプルファインダー)→ 参照 → 基本 → ファイル入力と出力 → Write To Text File.vi などをご参照ください。
 
LabVIEWメモリ管理と効率化に関しては下記のTutorialをご参照いただければと思います。
 
 
その他に不明な点がございましたら、ご連絡いただければと思います。
よろしくお願いいたします。
 
Thant Sin Naing
Application Engineer
日本ナショナルインスツルメンツ技術部
メッセージ2/6
11,398件の閲覧回数
日本ナショナルインスツルメンツ
技術部
タン 様
 
ご回答有難うございます。
投稿者です。
 
ご推測の通り、Forループの指標付け出力トンネルでエラーとなります。
現在取り組んでおりますプログラムは、リアルタイムに測定する必要があるので、
データを保存、読み出しているとその分時間がかかるので避けました。
そのため、メモリーを増設すれば済むのならと思い、メモリーも増設しました。
ただ、プログラムとして制約があるのなら意味の無い事でしたね。
 
単精度浮動少数に変換するなど対策は打ったのですが、まだ十分ではないようです。
教えていただいたTutorialも参考にしながら改良してみます。
 
何か効果的なアドバイスがありましたらご指導下さい。
 
ちなみに最初の投稿では「256点×256点のDBLデータを300ループしてまとめて出力でエラー」と書きましたが
単精度浮動少数に変換する事でこの条件ではエラーが出なくなりましたが、512×256×300にするとエラーになります。
希望としては1024×256×300のデータをメモリー上だけで処理できればと思っています。
 
 
0 件の賞賛
メッセージ3/6
11,378件の閲覧回数

Atsushi 様

この場合はメモリ上で処理するのは難しいと思います。Forループで計算したデータを次の処理に使用することであれば、Forループ内にファイル書き込み関数をおいて一旦データをバイナリファイトに落とします。(ファイルColseはしないで)Forループの処理後に、ファイルから読み取り関数でデータを読み取って、次の処理に使用する方法が効果的だと思います。

メッセージ4/6
11,357件の閲覧回数
日本ナショナルインスツルメンツ
技術部
タン 様
 
ご回答有難うございます。
投稿者です。
 
ご指導有難うございます。
バイナリファイルに読み書きしながらやってみます。
 
有難うございました。
 
 
0 件の賞賛
メッセージ5/6
11,355件の閲覧回数

Atsushi様

ご連絡いただきありがとうございます。お役に立てることができまして嬉しく思っております。

また何かございましたら、ご投稿いただければと思います。

今後ともよろしくお願い申し上げます。

Thant Sin Naing
Application Engineer
日本ナショナルインスツルメンツ技術部

0 件の賞賛
メッセージ6/6
11,318件の閲覧回数