「workspace compresses」というメッセージについて

[OS] ALL
[リリース] ALL
[キーワード] workspace, extent, WORKSIZE=, SHOW MEMORY

[質問]

SAS/IMLのプログラムを実行すると、計算終了までに非常に時間がかかるときがあります。同時に、次のようなメッセージがログに現れます。これはどのような意味でしょうか。また、どのような対処方法が考えられますか。

Note: ## workspace compresses.

[回答]

詳細については、「SAS/IML User's Guide, Version 8」(英語版、注文番号:57378)の「Further Notes」の章で「Memory and Workspace」の項を参照してください。

SAS/IMLでは、2つの論理的なメモリ領域、「symbolspace」と「workspace」を利用します。「workspace」は、さらに「extent」と呼ばれる区域に分けられます。「symbolspace」がシンボル・テーブルの情報(行列の情報)やコンパイルされたステートメント(モジュール)を保管するのに対して、「workspace」は行列成分の値を保持します。 これらの領域に対するメモリの割り当てはIMLによって自動的に行なわれ、一般に適切なメモリ量が設定されます(SHOW MEMORYステートメントで確認可能)。

しかし、SAS/IMLで非常に大きな行列を少数扱う、または小さな行列を多数扱うケースでは、 自動設定の数値が適切でないことがあります。 行列成分を保持する領域が足りない場合、SAS/IMLは現在の「extent」を圧縮します。 圧縮した後においても依然として十分な領域が存在しないときには、SAS/IMLは新たに「extent」を作成します。

「workspace」の中における圧縮の頻度が多くなればなるほど、プログラムの効率が下がります。 この圧縮の回数を少なくする一つの方法として、PROC IMLステートメントでWORKSIZE=オプションを使用し、「workspace」の「extent」の大きさを上げることが考えられます。
ただし、この圧縮の操作を完全に排除する必要はないことにご留意ください。 WORKSIZE=の指定であまりに大きな数値(コンピュータに搭載されているメモリの量に対して相対的に大きな値)を指定すると、IMLやDATAステップで使用される関数のアクセスを妨げる可能性があるからです。

残念ながら、実際に設定をさまざまに変えて試す以外に、適切な数値を知る方法はありません。SHOW MEMORYステートメントを使用すれば、現在の設定を確認できます。その数値を元に、より最適な設定を探索することも可能です。

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

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