[SCore-users-jp] (no subject)

kameyama @ pccluster.org kameyama @ pccluster.org
2002年 12月 24日 (火) 21:41:12 JST


亀山です.

In article <200212242028.JEB93058.96902IC2 @ mbox.media.nagoya-u.ac.jp> Naoshi Ueda <h995011b @ mbox.media.nagoya-u.ac.jp> wrotes:
>  DIMENSIONの大きさ(コンパイラのメモリ制限?)についての疑問及び
> 質問があります.以下の内容についての御回答よろしくお願いします
>  
>  条件
>  OS :Red Hut Linux
>   言語:FORTRAN77+MPI
>  
>  大きな配列を宣言する時,ある程度大きく宣言するとコンパイラ時に
> エラーが出てしまいます.これは,恐らくコンパイラ自身にメモリの制
> 限(静的確保の上限?)があると思うのですがどうでしょうか?仮にそう

まず, 大前提として, x86 系の CPU を扱うコンパイラは pointer は 32 bit
として扱っており, 4 GB が理論上の上限となります.

更に, linux ではそのうちの 1 GB を kernel が使用しますので,
user が使用できるのは 3 GB までです.
(これは code 部分などを含むので, データとして配列にとる場合は
これより小さくなります.)

ただ, x86 系でも, kernel の設定によってはそれ以上の memory (64 GB まで) を
認識できます.
(最大は 64 GB になります.)

しかし, 一つのプロセスが使用可能なメモリの上限は 4 GB のままです.

> であるならば,積んであるメモリに関係ないという事なので,PCにいく
> らメモリを積んでもあまり用を成さないように思われます.

4 GB 以上つんでいても process が複数あれば, それ以上の memory を
使用することになります.
(しかし, 現在の version の SCore では, myrinet で zerocopy 通信を行う場合,
4 GB 以上のアドレス空間にアクセスできません.
    http://www.pccluster.org/pipermail/score-users-jp/2002-November/000942.html
を参照してください.)

ここまでがハードな限界です.
そのほかに soft 的な上限が設定できます.
bash なら ulimmit, csh なら limit コマンドで制御できます.
もし, 配列全体の大きさが 3 GB 以下ならば limit コマンドを変更すれば
なんとかなるかも知れません.

                       from Kameyama Toyohisa



SCore-users-jp メーリングリストの案内