Oracle® Solaris Studio 12.4: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.5.3 メモリーサイズ

コンパイル処理は大量のメモリーを使用することがあります。必要なメモリーのサイズは、選択した最適化レベル、およびコンパイルするファイルのサイズや複雑さに依存します。最適化でメモリーが不足した場合、その時点の手続きを低いレベルの最適化で再試行して回復を試み、コマンド行の -On オプションで指定されていた本来のレベルで後続のルーチンを再開します。

コンパイラを実行するプロセッサには最低 64M バイトのメモリーが実装されている必要があります。256M バイトが推奨メモリーです。また、十分なスワップ領域が割り当てられる必要もあります。最低 200M バイトで、300M バイトが推奨値です。

メモリーの使用量は、手続きのサイズ、最適化レベル、仮想メモリーの制限、ディスクのスワップファイルのサイズ、その他さまざまな要素によって異なります。

多数のルーチンを含む単一のソースファイルをコンパイルすると、メモリーやスワップ領域が不足することがあります。

コンパイラのメモリーが不足する場合は、最適化レベルを下げてください。または fsplit(1) を使用して、複数のルーチンが含まれているソースファイルを、1 ルーチンが 1 ファイルに対応するようにいくつかのファイルに分割してください。

2.5.3.1 スワップ領域の制限

Oracle Solaris オペレーティングシステムのコマンドである swap -s は、利用可能なスワップ領域を表示しますswap(1M) を参照してください。

例: swap コマンドを使用します。

demo% swap -s
total: 40236k bytes allocated + 7280k reserved = 47516k used, 1058708k available
To determine the actual real 
memory:
demo% /usr/sbin/dmesg | grep mem
mem = 655360K (0x28000000)
avail mem = 602476544

2.5.3.2 スワップ領域の増加

ワークステーションのスワップ領域を増やすには、mkfile(1M) と swap(1M) コマンドを使用します。この操作は、スーパーユーザーだけが実行できます。mkfile によって特定サイズのファイルを作成し、swap -a によってそのファイルをシステムのスワップ領域に追加します。

demo# mkfile -v 90m /home/swapfile
/home/swapfile 94317840 bytes
demo# /usr/sbin/swap -a  /home/swapfile

2.5.3.3 仮想メモリーの制御

最適化レベル -O3 以上のレベルで大規模なルーチン (1 つの手続きが数千行ものコードで構成されるルーチン) をコンパイルすると、メモリーがさらに必要になる場合があり、コンパイル時間のパフォーマンスが低下することもあります。これを制御するには、1 つのプロセスで使用できる仮想メモリーの量を制限します。

sh シェルでは、ulimit コマンドを使用しますsh(1) を参照してください。

例: 仮想メモリーを 16M バイトに制限します。

demo$ ulimit -d 16000

csh シェルでは、limit コマンドを使用します。csh(1) を参照してください。

例: 仮想メモリーを 16M バイトに制限します。

demo% limit datasize 16M

いずれの場合も、オプティマイザは 16M バイトのデータ領域で最適化を再実行します。

この制限はマシンで利用可能なスワップ領域の総量を超えることはできないので、実際は、大規模なコンパイルの進行中であってもマシンを普通に使用できる程度の小さい値を指定してください。コンパイル処理でスワップ領域の半分以上が使用されることのないように注意してください。

例: 32M バイトのスワップ領域のあるマシンでは、次のコマンドを使用します。

sh シェルの場合:

demo$ ulimit -d 1600

csh の場合

demo% limit datasize 16M

最適な設定は、最適化のレベルや、利用可能な実メモリーと仮想メモリーの量によって異なります。

64 ビットの Solaris 環境では、アプリケーションデータセグメントのサイズに対する弱い制限値は 2G バイトです。データ領域の追加割り当てが必要な場合は、シェルの limit または ulimit コマンドを使用して制限を解除します。

csh の場合:

demo% limit datasize unlimited

shksh の場合:

demo$ ulimit -d unlimited

詳細は、『Oracle Solaris 64 ビット開発ガイド』を参照してください。