行列演算におけるメモリ使用量を減らす方法

[OS] ALL
[リリース] ALL
[キーワード] FREE, STORE

[質問]

SAS/IMLのプログラムを実行しようとすると、メモリが足りない場合があります。どのような対処策が考えられるでしょうか。

[回答]

SAS/IMLでどの程度のメモリを使用できるかは、ご利用のシステム環境に依存します。

SAS/IMLでは、全ての演算をメモリ上(実メモリだけではなく仮想メモリまで含める)で行ないます。1つの行列が占有するメモリは、「( 行数×列数×8 ) +16 バイト」となります。
メモリが足りないため行列を定義することができない場合には、いくつかの対処策が考えられます。

  1. 不要な行列が存在するとき、FREEステートメントを使用してその行列が占有していたメモリ領域を開放することができます。

  2. STOREステートメントを使用して、行列をライブラリに保存できます。FREEステートメントと併せて使用すれば、メモリ使用量を減らせます。なお、「SAS/IML User's Guide, Version 8」(英語版、注文番号:57378)の「Storage Features」の章には、詳細な説明が記載されています。

  3. 使用していないプログラムを終了させることによって、SAS/IMLで使用できるメモリ量が増える可能性もあります。

以上のような対策を実行しても十分なメモリ領域を確保できない場合には、より小さな行列のみを使用したプログラムに変更する必要があるかもしれません。

なお、行列を分割してから演算を行なう例については、下記のFAQをご参照ください。

上記の内容は、米国SAS本社のWEBページに記載されているFAQに基づいて作成されています。

http://support.sas.com/kb/22/313.html