4. 测试
XORWOW 生成器由 Marsaglia 提出 [5],并已使用 TestU01 “Crush” 测试框架进行了测试 [6]。NIST 伪随机性测试的完整套件 [7] 也已运行,尽管重点一直是 TestU01。TestU01 电池组中最严格的是 “BigCrush”,它在高端 CPU/GPU 上大约 5 小时内执行 106 项统计测试。XORWOW 生成器在大多数运行中都通过了所有测试,但偶尔会产生可疑的统计数据。下面是一个未通过所有测试的运行的摘要输出示例,其中包含特定失败的详细信息。
========= Summary results of BigCrush ========= Version: TestU01 1.2.3 Generator: curandXORWOW Number of statistics: 160 Total CPU time: 05:17:59.63 The following tests gave p-values outside [0.001, 0.9990]: (eps means a value < 1.0e-300): (eps1 means a value < 1.0e-15): Test p-value ---------------------------------------------- 81 LinearComp, r = 29 1 - 7.1e-11 ---------------------------------------------- All other tests were passed Detail from test 81: scomp_LinearComp test: ----------------------------------------------- N = 1, n = 400020, r = 29, s = 1 ----------------------------------------------- Number of degrees of freedom : 12 Chi2 statistic for size of jumps : 7.11 p-value of test : 0.85 ----------------------------------------------- Normal statistic for number of jumps : -6.41 p-value of test : 1 - 7.1e-11 *****
为了说明这一点, [6] 中的一个表格给出了在各种级别的 “Crush” 测试中对各种生成器运行的结果。只有少数生成器通过了所有 BigCrush 测试。例如,广受尊敬的梅森旋转算法 [8] 始终未能通过两项线性复杂度测试。
MRG32k3a 生成器在 [9] 中提出,并在 [10] 中提出了具体的实现。该生成器经常通过所有 “BigCrush” 测试,偶尔会出现类似于下面所示的边缘结果。
========= Summary results of BigCrush ========= Version: TestU01 1.2.3 Generator: curandMRG32k3a Number of statistics: 160 Total CPU time: 07:14:55.41 The following tests gave p-values outside [0.001, 0.9990]: (eps means a value < 1.0e-300): (eps1 means a value < 1.0e-15): Test p-value ---------------------------------------------- 59 WeightDistrib, r = 0 5.2e-4 ---------------------------------------------- All other tests were passed Detail from test 59: svaria_WeightDistrib test: ----------------------------------------------- N = 1, n = 20000000, r = 0, k = 256, Alpha = 0, Beta = 0.25 ----------------------------------------------- Number of degrees of freedom : 67 Chi-square statistic : 111.55 p-value of test : 5.2e-4 ***** ----------------------------------------------- CPU time used : 00:02:56.25
MTGP32 生成器是对 [1] 中概述的工作的改编。MTGP32 生成器在 “BigCrush” 上表现出一些边缘结果。下面是一个例子。
========= Summary results of BigCrush ========= Version: TestU01 1.2.3 Generator: curandMtgp32Int Number of statistics: 160 Total CPU time: 05:45:29.49 The following tests gave p-values outside [0.001, 0.9990]: (eps means a value < 1.0e-300): (eps1 means a value < 1.0e-15): Test p-value ---------------------------------------------- 12 CollisionOver, t = 21 0.9993 ---------------------------------------------- All other tests were passed Detail from test 12: smultin_MultinomialOver test: ----------------------------------------------- N = 30, n = 20000000, r = 28, d = 4, t = 21, Sparse = TRUE GenerCell = smultin_GenerCellSerial Number of cells = d^t = 4398046511104 Expected number per cell = 1 / 219902.33 EColl = n^2 / (2k) = 45.47473509 Hashing = TRUE Collision test CollisionOver: density = n / k = 1 / 219902.33 Expected number of collisions = Mu = 45.47 ----------------------------------------------- Results of CollisionOver test: POISSON approximation : Expected number of collisions = N*Mu : 1364.24 Observed number of collisions : 1248 p-value of test : 0.9993 ***** ----------------------------- Total number of cells containing j balls j = 0 : 131940795334368 j = 1 : 599997504 j = 2 : 1248 j = 3 : 0 j = 4 : 0 j = 5 : 0 ----------------------------------------------- CPU time used : 00:04:32.52
MT19937 生成器是迄今为止使用最广泛的 PRNG
========= Summary results of BigCrush ========= Version: TestU01 1.2.3 Generator: curandMT19937Int Number of statistics: 160 Total CPU time: 03:12:59.34 All tests were passed
Philox4_32_10 生成器是 [17] 中描述的基于计数器的 RNG 之一。
========= Summary results of BigCrush ========= Version: TestU01 1.2.3 Generator: curandPHILOXInt Number of statistics: 160 Total CPU time: 03:18:50.30 All tests were passed
Sobol’ 序列是使用 Joe 和 Kuo 推荐的方向向量生成的 [2]。加扰 Sobol’ 方法在 [3] 和 [4] 中进行了描述。
使用 Pearson 卡方检验 [11]、 [12]、Jarque-Bera 检验 [13]、Kolmogorov-Smirnov 检验 [14]、 [15] 和 Anderson-Darling 检验 [16],对每个生成器的正态分布进行了测试。
测试在 +/- 6 个标准差的范围内运行。运行了三个 Pearson 测试,单元格计数分别为 1000、100 和 25。测试输出的列标记为 PK(表示 1000 个单元格的 Pearson)、PC(表示 100 个单元格的 Pearson)、P25(表示 25 个单元格的 Pearson)、JB(表示 Jarque-Bera)、KS(表示 Kolmogorov-Smirnov)和 AD(表示 Anderson-Darling)。每个测试的拒绝标准都打印在标签下方。
以下表格代表了 XORWOW、MRG32k3a、MTGP32、MT19937、Philox、Sobol’ 32 位和加扰 Sobol’ 32 位生成器的正态分布统计测试的测试输出。每个表格的行代表在连续 10000 个样本序列上计算的统计结果。
XORWOW 生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0122 <.632 ---------------------------------------------------------------------------- 684.48120 58.97784 20.44693 2.84152 0.00540 0.32829 686.37925 54.84938 7.79583 0.55109 0.00900 0.25832 673.21437 69.15825 15.46540 0.30335 0.00872 0.26772 568.26999 49.99519 8.85046 0.66624 0.00870 0.22939 639.10690 84.23040 10.19753 0.19844 0.00542 0.27939
MRg32k3a 生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0122 <.632 ---------------------------------------------------------------------------- 764.38500 74.48157 19.32716 1.50118 0.01103 0.60351 795.31006 74.15086 11.78414 1.15159 0.00821 0.35343 741.85426 91.88692 20.67103 2.34232 0.00900 0.61787 644.62093 70.68369 17.18277 0.32870 0.01243* 0.34630 806.02693 93.50691 23.10548 2.67340 0.00978 0.51466
MTGP32 生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0122 <.632 ---------------------------------------------------------------------------- 924.62604 110.19868 23.45811 0.86919 0.00519 0.33411 708.76047 79.42919 20.67913 1.13427 0.01142 0.54632 674.17713 65.80415 13.09834 1.07799 0.01040 0.23860 733.35915 57.13829 17.66337 3.17017 0.01188 0.30864 620.17297 50.39043 14.75682 0.57970 0.00845 0.28916
MT19937 生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0077 <.632 ---------------------------------------------------------------------------- 663.51515 67.53027 9.70908 0.70428 0.00482 0.22643 758.11526 65.27417 10.81213 0.16740 0.00541 0.24615 678.79743 60.92754 27.50102 1.33330 0.00546 0.42693 741.21087 82.42319 24.10450 1.84422 0.00570 0.41724 644.92464 71.74918 18.32281 1.01582 0.00546 0.30622
Philox_4x32_10 生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0122 <.632 ---------------------------------------------------------------------------- 688.73231 78.60241 18.28300 0.23786 0.00520 0.24052 600.66650 59.78966 21.59090 4.24401 0.00464 0.49806 916.60146 78.16294 10.01345 1.53526 0.00660 0.25025 713.67544 61.20329 15.82239 0.79568 0.00614 0.26091 699.84498 80.73224 16.07304 1.37786 0.00464 0.29227
Sobol’ 32 位生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0122 <.632 ---------------------------------------------------------------------------- 157.04578 6.47398 1.45802 0.19007 0.00024 0.00188 243.82767 11.98164 1.34982 0.00668 0.00030 0.00086 229.87234 10.40206 2.73912 0.04165 0.00036 0.00137 290.29451 17.09013 3.25717 0.02583 0.00042 0.00172 327.32072 19.22832 5.09510 0.00335 0.00036 0.00127
加扰 Sobol’ 32 位生成器
PK PC P25 JB KS AD <1058 <118 <33 <4.6 <0.0122 <.632 ---------------------------------------------------------------------------- 255.80606 10.93180 1.33766 0.01226 0.00036 0.00112 258.84244 8.45589 1.56766 0.04164 0.00036 0.00170 585.34346 49.33610 5.32037 0.04069 0.00043 0.00208 337.50312 27.64720 3.38925 0.01953 0.00041 0.00211 729.56687 56.89682 32.89772 0.00911 0.00040 0.00204
即使对数正态分布与正态分布密切相关,也已使用 Pearson 卡方检验和 Kolmogorov-Smirnov 检验对其进行了测试。
以下表格代表了 XORWOW、MRG32k3a、MTGP32、MT19937、Philox、Sobol’ 32 位和加扰 Sobol’ 32 位生成器的对数正态分布统计测试的测试输出。
XORWOW 生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 1019.57936 105.63667 13.15820 0.00540 991.93663 91.95369 20.46549 0.00900 983.09678 115.34978 20.50434 0.00872 966.45604 113.30013 24.54060 0.00870 996.35262 111.50026 21.01332 0.00542
MRG32k3a 生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 1000.00359 90.12428 22.82709 0.00826 942.17843 81.16259 16.13670 0.00739 1005.62148 102.29924 23.62705 0.00697 1053.68391 98.75565 28.65422 0.01107 998.38936 103.43649 19.26568 0.00803
MTGP32 生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 1010.18903 94.51850 17.98126 0.00771 993.78319 76.86543 12.48859 0.00831 1010.22068 63.76027 11.65743 0.00677 963.33103 89.44369 17.96636 0.01200 927.15616 75.85515 13.64221 0.00566
MT19937 生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 929.15309 83.63208 16.91037 0.00482 1058.79511 114.19971 27.28300 0.00541 963.35338 103.52657 26.68634 0.00546 1009.21512 114.36706 38.44470 0.00570 976.91303 84.83272 14.78584 0.00546
Philox_4x32_10 生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 992.19843 100.39826 14.91235 0.00357 962.03714 115.40663 18.03086 0.00595 1006.41781 92.84903 27.33686 0.00385 1009.75491 96.93654 11.99484 0.00520 1003.85449 89.00801 15.64060 0.00464
Sobol’ 32 位生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 289.42589 5.03327 0.48858 0.00024 386.79860 6.57783 0.76902 0.00030 355.04631 8.54472 1.12228 0.00036 434.19211 9.54021 2.07006 0.00042 343.57507 10.71571 0.42503 0.00036
加扰 Sobol- 32 位生成器
PK PC P25 KS <1058 <118 <33 <0.0122 ---------------------------------------------------- 354.55037 8.20727 0.24592 0.00036 506.45280 12.93848 0.73323 0.00036 451.96949 18.18903 0.69465 0.00043 593.25666 16.55782 0.54769 0.00041 423.05263 12.06600 0.53472 0.00040
使用 Pearson 卡方检验 [11],对每个生成器的泊松分布进行了测试。
测试在广泛的 lambda 值范围内运行,并将统计数据与使用 MKL 的泊松分布结果进行比较。