研究概要 |
ス-パ-・コンピュ-タで使用される乱数は膨大な数である。1秒に1G個=2^<30>生成すると31〜32桁の合同法の乱数は1秒で周期を回ってしまう。多倍長の合同法は計算が面倒なので、M系列乱数を用いる。この例では、周期は2^<521>ー1〓6.87×10^<156>で、1G個/秒でも10^<147>秒〓10^<140>年かかる。 良好な性質をもつM系列乱数を並列計算機で生成するためには、初期値の設定の仕方が重要である。調査の結果、次の方法が有効であることが分かった。すなわち、各プロセッサに521語(1語=1ビット)からなる1次元配列{r_k,O≦k≦520}を用意し、配列rにビット毎のM系列から得られる1n個のビット列{a_t,0≦t≦1nー1}を横方向に並べる。プロセッサ数nが2の羃乗でない場合は、nを起える最小の2の羃乗について上の操作をおこない、0〜(nー1)の部分だけ取ればよい。乱数を生成するには、各プロセッサで独立に漸化式r_t=r_<tー521>.XOR.r_<tー32>を実行し、r_tを[0,1]の浮動小数に変換する。ただし、.XOR.はビット毎の排他的論理和である。 各プロセッサでの乱数生成のアルゴリズムは逐次型の場合と同様で、ベクトル化可能である。このプログラムにより、521個の乱数が生成される。個数が個定されてしまうのが難であるが、ソフト的に調節すればよい。 このベクトルアルゴリズムを高並列計算機QCDPAXにマイクロプログラムにより実装したところ、1個当り、373μsecで生成することができた。432台全体では1.16G個/秒である。なお、初期設定はホストのワ-クステ-ションで行う。
|