mt-liteおよび比較対象の擬似乱数生成アルゴリズムの最悪応答時間の評価を示す。ただし、複数乱数生成を行うものは関数呼び出し側で最悪応答時間を制御できるため、評価する意味がないので対象に入れていない。
測定は、生成関数内部にループを持つもののみに対して行った。生成関数内でのインデックス値の更新を意図的に停止させるなどして常に最悪時間での応答を行うようにし、106回の関数呼び出しを行って評価した。ループを持たないものの最悪応答時間は、実行速度の測定結果から計算で求めた平均応答時間と等しいものとした。どちらの方法も最悪応答時間の評価としては厳密性を欠くので、平均計算量と最悪計算量から応答時間を見積もる際の参考値程度のものとして見るべきである。
結果は次の通り。表中のworstは最悪応答時間、aveは実行速度の測定結果から計算で求めた平均応答時間を示す。値の単位はナノ秒である。
表 6.4. x86 (Pentium M 1.6GHz) + Gcc (4.1.2, -O3)での最悪応答時間
| target | worst[ns] | ave[ns] |
|---|---|---|
| mt19937ar (normal) | 2460.0 | 13.4 |
| mt19937ar (inlined) | 2470.0 | 11.0 |
| SFMT-mt19937-SIMD-seque (normal) | 1710.0 | 9.0 |
| SFMT-mt19937-SIMD-seque (inlined) | 1710.0 | 6.4 |
| SFMT-mt19937-noSIMD-seque (normal) | 6840.0 | 18.6 |
| SFMT-mt19937-noSIMD-seque (inlined) | 6790.0 | 15.1 |
| SFMT-mt607-SIMD-seque (normal) | 48.0 | 7.8 |
| SFMT-mt607-SIMD-seque (inlined) | 46.0 | 6.4 |
| SFMT-mt607-noSIMD-seque (normal) | 222.0 | 18.7 |
| SFMT-mt607-noSIMD-seque (inlined) | 216.0 | 15.0 |
| WELL512a | 17.5 | 17.5 |
| WELL1024a | 18.4 | 18.4 |
| xor128 | 8.2 | 8.2 |
| LCG (normal) | 4.4 | 4.4 |
| LCG (inlined) | 3.3 | 3.3 |
| mtlite-mt19937-loop | 2660.0 | 12.5 |
| mtlite-mt19937-loop-nt | 2660.0 | 9.0 |
| mtlite-mt19937-nonloop | 21.6 | 21.6 |
| mtlite-mt19937-nonloop-nt | 18.2 | 18.2 |
| mtlite-mt607-loop | 68.0 | 11.5 |
| mtlite-mt607-loop-nt | 64.0 | 7.1 |
| mtlite-mt607-nonloop | 22.7 | 22.7 |
| mtlite-mt607-nonloop-nt | 19.3 | 19.3 |
表 6.5. PowerPC (G4 1.25GHz) + Gcc (4.1.2, -O3)での最悪応答時間
| target | worst[ns] | ave[ns] |
|---|---|---|
| mt19937ar (normal) | 4880.0 | 23.0 |
| mt19937ar (inlined) | 4890.0 | 19.0 |
| SFMT-mt19937-SIMD-seque (normal) | 2080.0 | 19.4 |
| SFMT-mt19937-SIMD-seque (inlined) | 1250.0 | 11.6 |
| SFMT-mt19937-noSIMD-seque (normal) | 6130.0 | 44.2 |
| SFMT-mt19937-noSIMD-seque (inlined) | 5740.0 | 14.8 |
| SFMT-mt607-SIMD-seque (normal) | 50.0 | 13.5 |
| SFMT-mt607-SIMD-seque (inlined) | 40.0 | 10.0 |
| SFMT-mt607-noSIMD-seque (normal) | 290.0 | 69.7 |
| SFMT-mt607-noSIMD-seque (inlined) | 290.0 | 25.5 |
| WELL512a | 28.1 | 28.1 |
| WELL1024a | 26.4 | 26.4 |
| xor128 | 14.1 | 14.1 |
| LCG (normal) | 8.8 | 8.8 |
| LCG (inlined) | 4.0 | 4.0 |
| mtlite-mt19937-loop | 4880.0 | 19.8 |
| mtlite-mt19937-loop-nt | 4880.0 | 16.6 |
| mtlite-mt19937-nonloop | 22.1 | 22.1 |
| mtlite-mt19937-nonloop-nt | 16.7 | 16.7 |
| mtlite-mt607-loop | 149.0 | 19.5 |
| mtlite-mt607-loop-nt | 149.0 | 16.6 |
| mtlite-mt607-nonloop | 22.7 | 22.7 |
| mtlite-mt607-nonloop-nt | 17.4 | 17.4 |
表 6.6. ARM (X-Scale PXA255 400MHz) + Gcc (3.2.3, -O3)での最悪応答時間
| target | worst[ns] | ave[ns] |
|---|---|---|
| mt19937ar (normal) | 30200.0 | 199.1 |
| mt19937ar (inlined) | 29980.0 | 195.8 |
| SFMT-mt19937-noSIMD-seque (normal) | 193700.0 | 435.3 |
| SFMT-mt19937-noSIMD-seque (inlined) | 197700.0 | 392.8 |
| SFMT-mt607-noSIMD-seque (normal) | 6470.0 | 439.7 |
| SFMT-mt607-noSIMD-seque (inlined) | 6560.0 | 399.0 |
| WELL512a | 185.2 | 185.2 |
| WELL1024a | 182.5 | 182.5 |
| xor128 | 114.5 | 114.5 |
| LCG (normal) | 84.6 | 84.6 |
| LCG (inlined) | 10.5 | 10.5 |
| mtlite-mt19937-loop | 32300.0 | 111.3 |
| mtlite-mt19937-loop-nt | 32100.0 | 92.8 |
| mtlite-mt19937-nonloop | 185.3 | 185.3 |
| mtlite-mt19937-nonloop-nt | 149.8 | 149.8 |
| mtlite-mt607-loop | 1110.0 | 116.6 |
| mtlite-mt607-loop-nt | 1090.0 | 98.0 |
| mtlite-mt607-nonloop | 177.3 | 177.3 |
| mtlite-mt607-nonloop-nt | 136.1 | 136.1 |
結果から、関数内部にループを持つmt19937ar、SFMT、mtlite-loopおよびmtlite-loop-ntは、平均応答時間に比べて最悪応答時間が著しく長いことがわかる。また、ループがある場合の最悪応答時間は状態ベクトルの長さに比例するため、周期219937-1のものよりも周期2607-1のものの方が最悪応答時間が短いことがわかる。
リアルタイム性が要求され、ループを持つ関数の最悪応答時間では要求を満たせない場合は、mtlite-nonloop、mtlite-nonloop-ntあるいはWELLやxor128などのループを持たない乱数生成アルゴリズムを選択する必要がある。
ただし、ループを持つものであっても、周期を短くすることで最悪応答時間を要求内に収めることができるかどうかは検討する価値がある。また、上記評価対象のすべてのループを持つ乱数生成アルゴリズムにおいて、応答時間が最悪値を示す可能性があるのは内部の状態ベクトルを更新するときのみである: 状態ベクトルの更新は一定間隔で定期的に行われるため、例えば2回の連続した乱数生成の両方が最悪応答時間となることはない。