評価対象の擬似乱数生成アルゴリズムにおける、乱数生成関数の使用メモリ量の評価を示す。
測定対象のメモリ量は次の通り。
測定値は、各評価プログラムのオブジェクトファイルのヘッダまたは逆アセンブルリストから算出した。ただし、インライン展開時のコードの大きさは、積極的にインライン展開を指示した場合は通常関数のコードの大きさに等しく、指示しなかった場合は0とした。暗黙に使用するスタック領域は測定対象外とした。
結果は次の通り。値の単位はバイトである。
表 6.7. x86 + Gcc (4.1.2, -O3)での使用メモリ量
表 6.8. PowerPC + Gcc (4.1.2, -O3)での使用メモリ量
表 6.9. ARM + Gcc (3.2.3, -O3)での使用メモリ量
| target | code once | code inlined | data state | data others |
|---|---|---|---|---|
| mt19937ar (normal) | 456 | 0 | 2500 | 8 |
| mt19937ar (inlined) | 456 | 456 | 2500 | 8 |
| SFMT-mt19937-noSIMD-seque (normal) | 944 | 0 | 2500 | 4 |
| SFMT-mt19937-noSIMD-seque (inlined) | 944 | 944 | 2500 | 4 |
| SFMT-mt19937-noSIMD-block | 2900 | 0 | 2500 | 4 |
| SFMT-mt607-noSIMD-seque (normal) | 956 | 0 | 80 | 8 |
| SFMT-mt607-noSIMD-seque (inlined) | 956 | 956 | 80 | 8 |
| SFMT-mt607-noSIMD-block | 2924 | 0 | 80 | 8 |
| WELL512a | 172 | 0 | 68 | 12 |
| WELL1024a | 172 | 0 | 132 | 12 |
| xor128 | 88 | 0 | 16 | 0 |
| LCG (normal) | 52 | 0 | 4 | 0 |
| LCG (inlined) | 0 | 52 | 4 | 0 |
| mtlite-mt19937-loop | 252 | 108 | 2500 | 8 |
| mtlite-mt19937-loop-nt | 252 | 64 | 2500 | 8 |
| mtlite-mt19937-nonloop | 172 | 0 | 2500 | 0 |
| mtlite-mt19937-nonloop-nt | 128 | 0 | 2500 | 0 |
| mtlite-mt19937-block | 668 | 0 | 2500 | 8 |
| mtlite-mt19937-block-nt | 444 | 0 | 2500 | 8 |
| mtlite-mt607-loop | 220 | 104 | 80 | 8 |
| mtlite-mt607-loop-nt | 220 | 56 | 80 | 8 |
| mtlite-mt607-nonloop | 160 | 0 | 80 | 0 |
| mtlite-mt607-nonloop-nt | 108 | 0 | 80 | 0 |
| mtlite-mt607-block | 632 | 0 | 80 | 8 |
| mtlite-mt607-block-nt | 404 | 0 | 80 | 8 |
結果からわかることは次の通り。
なお、x86およびPowerPCでのSFMT、mtlite-loopおよびmtlite-blockにおいて、周期219937-1と周期2607-1のコードの大きさに隔たりがあるが、これは周期2607-1の方のコードに対してGcc-4.xが完全ループ除去(complete loop peeling)を行ったためである: 一般的に短周期の方がコードが大きくなる傾向があるわけではないので、周期219937-1の方の測定値を指標とした方がよいだろう。