はじめに
疑似乱数生成器の計測をしましょう. 疑似乱数生成器に限らず, 計測や調査をしない, "たぶん", "おそらく"で物事を進めないようにしましょう.
疑似乱数生成器
ひとつめは知らない. ふたつめは, How can I test if CRC32C is a "good" random generator?から. みっつめはPCGです.
random.cpp
#include <cstdint>
#include <cstring>
#include <charconv>
#include <functional>
#include <chrono>
#include <vector>
#include <fstream>
#include <iostream>
#include <sstream>
#include <nmmintrin.h>
inline uint32_t crc32_random()
{
#if defined(__GNUC__) || defined(__clang__)
uint32_t eax, edx;
__asm__ volatile (
"rdtsc\n"
"crc32l %%edx, %%eax"
: "=a"(eax), "=d" (edx));
return eax;
#endif
}
uint32_t crc32_random2()
{
static uint32_t r = 123456U;
r = _mm_crc32_u32(r, r<<18);
return r;
}
namespace
{
inline uint32_t rotr32(uint32_t x, uint32_t r)
{
return (x>>r) | (x<<((~r+1)&31U));
}
}
uint32_t pcg32()
{
static constexpr uint64_t Increment = 0x14057B7EF767814FULL;
static constexpr uint64_t Multiplier = 0x5851F42D4C957F2DULL;
static uint64_t state = 123456U;
uint64_t x = state;
uint32_t count = static_cast<uint32_t>(x>>59);
state = x*Multiplier + Increment;
x ^= x>>18;
return rotr32(static_cast<uint32_t>(x>>27), count);
}
void test(std::function<uint32_t(void)> func, uint32_t count, const char* name)
{
std::vector<uint32_t> values;
values.resize(count);
std::chrono::time_point start = std::chrono::high_resolution_clock::now();
for(uint32_t i=0; i<count; ++i){
values[i] = func();
}
std::chrono::duration duration = std::chrono::high_resolution_clock::now() - start;
std::ostringstream oss;
oss << name << ".bin";
std::string filename = oss.str();
std::ofstream file(filename.c_str(), std::ios::binary);
file.write(reinterpret_cast<char*>(&values[0]), sizeof(uint32_t)*values.size());
file.close();
std::cout << name << ": " << std::chrono::duration_cast<std::chrono::microseconds>(duration).count() << " microseconds" << std::endl;
}
int main(int /*arc*/, char** argv)
{
int32_t count = 0;
std::string arg = argv[1];
std::from_chars(arg.c_str(), arg.c_str()+arg.length(), count);
test(crc32_random, static_cast<uint32_t>(count), "crc32");
test(crc32_random2, static_cast<uint32_t>(count), "crc32_2");
test(pcg32, static_cast<uint32_t>(count), "pcg32");
return 0;
}
DieHarder
DieHarderを使って品質を検証します. ソースからビルドする手間を省いてUbuntuのパッケージを使いました.
$ apt install dieharder
4バイトの乱数列が並んだバイナリファイルに対して, 全てのテストを実行するには次のようにします.
$ dieharder -a -g 201 -f crc32.bin
結果
環境
コンパイラとオプションです.
$ g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0
$ g++ -std=c++17 -O2 -march=skylake random.cpp -o random
CPUです.
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 142
Model name: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz
Stepping: 12
CPU MHz: 2100.000
CPU max MHz: 4200.0000
CPU min MHz: 400.0000
BogoMIPS: 4199.88
Virtualization: VT-x
L1d cache: 128 KiB
L1i cache: 128 KiB
L2 cache: 1 MiB
L3 cache: 6 MiB
NUMA node0 CPU(s): 0-7
Vulnerability Itlb multihit: KVM: Mitigation: VMX disabled
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
Vulnerability Srbds: Mitigation; TSX disabled
Vulnerability Tsx async abort: Not affected
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts
acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art
arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclm
ulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 s
se4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm
3dnowprefetch cpuid_fault epb invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr
_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust sgx bmi1 avx2 smep bm
i2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsa
ves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1
d arch_capabilities
テストデータは上記プログラムを, 次の引数で実行しました.
$ ./random 268435456
実行時間
生成器 | 時間 |
---|---|
crc32 | 1,606,235 microseconds |
crc32_2 | 515,165 microseconds |
pcg32 | 579,748 microseconds |
テスト結果
CRC32?
未編集でそのままですが, 失敗が多過ぎです.
crc32
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name | filename |rands/second|
file_input_raw| crc32.bin| 6.47e+07 |
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.00000000| FAILED
diehard_operm5| 0| 1000000| 100|0.00000000| FAILED
diehard_rank_32x32| 0| 40000| 100|0.00000000| FAILED
diehard_rank_6x8| 0| 100000| 100|0.00000000| FAILED
diehard_bitstream| 0| 2097152| 100|0.00000000| FAILED
diehard_opso| 0| 2097152| 100|0.00000000| FAILED
diehard_oqso| 0| 2097152| 100|0.00000000| FAILED
diehard_dna| 0| 2097152| 100|0.00000000| FAILED
diehard_count_1s_str| 0| 256000| 100|0.00000000| FAILED
diehard_count_1s_byt| 0| 256000| 100|0.00000000| FAILED
diehard_parking_lot| 0| 12000| 100|0.00000000| FAILED
diehard_2dsphere| 2| 8000| 100|0.00000000| FAILED
diehard_3dsphere| 3| 4000| 100|0.00000000| FAILED
diehard_squeeze| 0| 100000| 100|0.00000000| FAILED
diehard_sums| 0| 100| 100|0.01661655| PASSED
diehard_runs| 0| 100000| 100|0.00000000| FAILED
diehard_runs| 0| 100000| 100|0.00000000| FAILED
diehard_craps| 0| 200000| 100|0.00000000| FAILED
diehard_craps| 0| 200000| 100|0.00000000| FAILED
marsaglia_tsang_gcd| 0| 10000000| 100|0.00000000| FAILED
marsaglia_tsang_gcd| 0| 10000000| 100|0.00000000| FAILED
sts_monobit| 1| 100000| 100|0.11443577| PASSED
sts_runs| 2| 100000| 100|0.74085909| PASSED
sts_serial| 1| 100000| 100|0.28523649| PASSED
sts_serial| 2| 100000| 100|0.00000112| WEAK
sts_serial| 3| 100000| 100|0.00007387| WEAK
sts_serial| 3| 100000| 100|0.28541894| PASSED
sts_serial| 4| 100000| 100|0.97027219| PASSED
sts_serial| 4| 100000| 100|0.00060930| WEAK
sts_serial| 5| 100000| 100|0.61673590| PASSED
sts_serial| 5| 100000| 100|0.69267033| PASSED
sts_serial| 6| 100000| 100|0.00037420| WEAK
sts_serial| 6| 100000| 100|0.00000001| FAILED
sts_serial| 7| 100000| 100|0.00000000| FAILED
sts_serial| 7| 100000| 100|0.00000001| FAILED
sts_serial| 8| 100000| 100|0.00000000| FAILED
sts_serial| 8| 100000| 100|0.00000000| FAILED
sts_serial| 9| 100000| 100|0.00000000| FAILED
sts_serial| 9| 100000| 100|0.00000000| FAILED
sts_serial| 10| 100000| 100|0.00000000| FAILED
sts_serial| 10| 100000| 100|0.00000000| FAILED
sts_serial| 11| 100000| 100|0.00000000| FAILED
sts_serial| 11| 100000| 100|0.00000000| FAILED
sts_serial| 12| 100000| 100|0.00000000| FAILED
sts_serial| 12| 100000| 100|0.00000000| FAILED
sts_serial| 13| 100000| 100|0.00000000| FAILED
sts_serial| 13| 100000| 100|0.00000000| FAILED
sts_serial| 14| 100000| 100|0.00000000| FAILED
sts_serial| 14| 100000| 100|0.00000000| FAILED
sts_serial| 15| 100000| 100|0.00000000| FAILED
sts_serial| 15| 100000| 100|0.00000000| FAILED
sts_serial| 16| 100000| 100|0.00000000| FAILED
sts_serial| 16| 100000| 100|0.00000000| FAILED
rgb_bitdist| 1| 100000| 100|0.00000000| FAILED
rgb_bitdist| 2| 100000| 100|0.00000000| FAILED
rgb_bitdist| 3| 100000| 100|0.00000000| FAILED
rgb_bitdist| 4| 100000| 100|0.00000000| FAILED
rgb_bitdist| 5| 100000| 100|0.00000000| FAILED
rgb_bitdist| 6| 100000| 100|0.00000000| FAILED
rgb_bitdist| 7| 100000| 100|0.00000000| FAILED
rgb_bitdist| 8| 100000| 100|0.00000000| FAILED
rgb_bitdist| 9| 100000| 100|0.00004402| WEAK
rgb_bitdist| 10| 100000| 100|0.14882915| PASSED
rgb_bitdist| 11| 100000| 100|0.72958774| PASSED
rgb_bitdist| 12| 100000| 100|0.98409836| PASSED
rgb_minimum_distance| 2| 10000| 1000|0.00000000| FAILED
rgb_minimum_distance| 3| 10000| 1000|0.00000000| FAILED
rgb_minimum_distance| 4| 10000| 1000|0.00000000| FAILED
rgb_minimum_distance| 5| 10000| 1000|0.00000000| FAILED
rgb_permutations| 2| 100000| 100|0.25841978| PASSED
rgb_permutations| 3| 100000| 100|0.00000000| FAILED
rgb_permutations| 4| 100000| 100|0.00000000| FAILED
rgb_permutations| 5| 100000| 100|0.00000000| FAILED
rgb_lagged_sum| 0| 1000000| 100|0.32966556| PASSED
rgb_lagged_sum| 1| 1000000| 100|0.15913695| PASSED
rgb_lagged_sum| 2| 1000000| 100|0.08897389| PASSED
rgb_lagged_sum| 3| 1000000| 100|0.04053730| PASSED
rgb_lagged_sum| 4| 1000000| 100|0.13849723| PASSED
rgb_lagged_sum| 5| 1000000| 100|0.07664901| PASSED
rgb_lagged_sum| 6| 1000000| 100|0.65775607| PASSED
rgb_lagged_sum| 7| 1000000| 100|0.46420673| PASSED
rgb_lagged_sum| 8| 1000000| 100|0.72410204| PASSED
rgb_lagged_sum| 9| 1000000| 100|0.18669990| PASSED
rgb_lagged_sum| 10| 1000000| 100|0.82862357| PASSED
rgb_lagged_sum| 11| 1000000| 100|0.14894108| PASSED
rgb_lagged_sum| 12| 1000000| 100|0.21143731| PASSED
rgb_lagged_sum| 13| 1000000| 100|0.35191178| PASSED
rgb_lagged_sum| 14| 1000000| 100|0.40627558| PASSED
rgb_lagged_sum| 15| 1000000| 100|0.49954236| PASSED
rgb_lagged_sum| 16| 1000000| 100|0.32340207| PASSED
rgb_lagged_sum| 17| 1000000| 100|0.21871723| PASSED
rgb_lagged_sum| 18| 1000000| 100|0.13077551| PASSED
rgb_lagged_sum| 19| 1000000| 100|0.13648137| PASSED
rgb_lagged_sum| 20| 1000000| 100|0.37977881| PASSED
rgb_lagged_sum| 21| 1000000| 100|0.38020476| PASSED
rgb_lagged_sum| 22| 1000000| 100|0.65908700| PASSED
rgb_lagged_sum| 23| 1000000| 100|0.97132587| PASSED
rgb_lagged_sum| 24| 1000000| 100|0.53150748| PASSED
rgb_lagged_sum| 25| 1000000| 100|0.23999269| PASSED
rgb_lagged_sum| 26| 1000000| 100|0.40134130| PASSED
rgb_lagged_sum| 27| 1000000| 100|0.40826578| PASSED
rgb_lagged_sum| 28| 1000000| 100|0.49287397| PASSED
rgb_lagged_sum| 29| 1000000| 100|0.84180797| PASSED
rgb_lagged_sum| 30| 1000000| 100|0.93236271| PASSED
rgb_lagged_sum| 31| 1000000| 100|0.20939033| PASSED
rgb_lagged_sum| 32| 1000000| 100|0.57051539| PASSED
rgb_kstest_test| 0| 10000| 1000|0.00000000| FAILED
dab_bytedistrib| 0| 51200000| 1|0.00001192| WEAK
dab_dct| 256| 50000| 1|0.00000000| FAILED
Preparing to run test 207. ntuple = 0
dab_filltree| 32| 15000000| 1|0.00000000| FAILED
dab_filltree| 32| 15000000| 1|0.00000000| FAILED
Preparing to run test 208. ntuple = 0
dab_filltree2| 0| 5000000| 1|0.00000000| FAILED
dab_filltree2| 1| 5000000| 1|0.00000000| FAILED
Preparing to run test 209. ntuple = 0
dab_monobit2| 12| 65000000| 1|1.00000000| FAILED
CRC32-2
パスしなかったテストだけ記載します. 少ない, 気持ちいい, 編集し甲斐があります. 品質は結構優秀とはいえ, xorshiftの変種を使えばいいし, 移植性を考えると微妙な性能と思います.
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name | filename |rands/second|
file_input_raw| crc32_2.bin| 6.02e+07 |
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_rank_32x32| 0| 40000| 100|0.00000000| FAILED
marsaglia_tsang_gcd| 0| 10000000| 100|0.00000474| WEAK
sts_serial| 13| 100000| 100|0.99792028| WEAK
sts_serial| 14| 100000| 100|0.99911806| WEAK
rgb_minimum_distance| 3| 10000| 1000|0.00000021| FAILED
rgb_minimum_distance| 4| 10000| 1000|0.00141867| WEAK
rgb_permutations| 5| 100000| 100|0.99779808| WEAK
rgb_lagged_sum| 29| 1000000| 100|0.99701987| WEAK
rgb_lagged_sum| 31| 1000000| 100|0.00007929| WEAK
PCG32
特殊な命令を使わないため移植性が高く, 速度と品質のバランスがいいです, 編集楽です, FAILED
がないとか心洗われる.
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name | filename |rands/second|
file_input_raw| pcg32.bin| 5.95e+07 |
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_runs| 0| 100000| 100|0.99992228| WEAK
sts_serial| 9| 100000| 100|0.99758599| WEAK
rgb_bitdist| 9| 100000| 100|0.99947097| WEAK
rgb_lagged_sum| 7| 1000000| 100|0.00001093| WEAK
rgb_lagged_sum| 8| 1000000| 100|0.00168199| WEAK
rgb_lagged_sum| 9| 1000000| 100|0.00250357| WEAK
rgb_lagged_sum| 15| 1000000| 100|0.00004920| WEAK
rgb_lagged_sum| 19| 1000000| 100|0.00376622| WEAK
rgb_lagged_sum| 23| 1000000| 100|0.00031668| WEAK
まとめ
xorshift32ですらほとんどのテストをパスするので, かなり品質が悪いといっていいでしょう. 速度もRDTSC命令はそんなに速くない, これでもアウトオブオーダー対策をしていないので, まともな実装より速いはずなのです.
さすPCG.
誤り検出を目的としたハッシュ関数を別の目的に使うのは間違っていますよね?という当たり前の結果だと思います. AES-NIの方がましじゃないですかね.
おまけ
IBM RANDUよりだめじゃね?
流石にそれはないですよね, しかし性質が解っているので後加工もありならRANDUの方がましじゃないでしょうか.
RANDU
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name | filename |rands/second|
file_input_raw| randu.bin| 6.07e+07 |
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.00000000| FAILED
diehard_operm5| 0| 1000000| 100|0.00000000| FAILED
diehard_rank_32x32| 0| 40000| 100|0.00000000| FAILED
diehard_rank_6x8| 0| 100000| 100|0.00000000| FAILED
diehard_bitstream| 0| 2097152| 100|0.00000000| FAILED
diehard_opso| 0| 2097152| 100|0.00000000| FAILED
diehard_oqso| 0| 2097152| 100|0.00000000| FAILED
diehard_dna| 0| 2097152| 100|0.00000000| FAILED
diehard_count_1s_str| 0| 256000| 100|0.00000000| FAILED
diehard_count_1s_byt| 0| 256000| 100|0.00000000| FAILED
diehard_parking_lot| 0| 12000| 100|0.00000000| FAILED
diehard_2dsphere| 2| 8000| 100|0.00000000| FAILED
diehard_3dsphere| 3| 4000| 100|0.00000000| FAILED
diehard_squeeze| 0| 100000| 100|0.00000000| FAILED
diehard_sums| 0| 100| 100|0.00000000| FAILED
diehard_runs| 0| 100000| 100|0.65823037| PASSED
diehard_runs| 0| 100000| 100|0.00002074| WEAK
diehard_craps| 0| 200000| 100|0.00000000| FAILED
diehard_craps| 0| 200000| 100|0.00000000| FAILED
marsaglia_tsang_gcd| 0| 10000000| 100|0.00000000| FAILED
marsaglia_tsang_gcd| 0| 10000000| 100|0.00000000| FAILED
sts_monobit| 1| 100000| 100|0.00000000| FAILED
sts_runs| 2| 100000| 100|0.00000000| FAILED
sts_serial| 1| 100000| 100|0.00000000| FAILED
sts_serial| 2| 100000| 100|0.00000000| FAILED
sts_serial| 3| 100000| 100|0.00000000| FAILED
sts_serial| 3| 100000| 100|0.00000000| FAILED
sts_serial| 4| 100000| 100|0.00000000| FAILED
sts_serial| 4| 100000| 100|0.00000000| FAILED
sts_serial| 5| 100000| 100|0.00000000| FAILED
sts_serial| 5| 100000| 100|0.00000000| FAILED
sts_serial| 6| 100000| 100|0.00000000| FAILED
sts_serial| 6| 100000| 100|0.00000000| FAILED
sts_serial| 7| 100000| 100|0.00000000| FAILED
sts_serial| 7| 100000| 100|0.00000000| FAILED
sts_serial| 8| 100000| 100|0.00000000| FAILED
sts_serial| 8| 100000| 100|0.00000000| FAILED
sts_serial| 9| 100000| 100|0.00000000| FAILED
sts_serial| 9| 100000| 100|0.00000000| FAILED
sts_serial| 10| 100000| 100|0.00000000| FAILED
sts_serial| 10| 100000| 100|0.00000000| FAILED
sts_serial| 11| 100000| 100|0.00000000| FAILED
sts_serial| 11| 100000| 100|0.00000000| FAILED
sts_serial| 12| 100000| 100|0.00000000| FAILED
sts_serial| 12| 100000| 100|0.00000000| FAILED
sts_serial| 13| 100000| 100|0.00000000| FAILED
sts_serial| 13| 100000| 100|0.00000000| FAILED
sts_serial| 14| 100000| 100|0.00000000| FAILED
sts_serial| 14| 100000| 100|0.00000000| FAILED
sts_serial| 15| 100000| 100|0.00000000| FAILED
sts_serial| 15| 100000| 100|0.00000000| FAILED
sts_serial| 16| 100000| 100|0.00000000| FAILED
sts_serial| 16| 100000| 100|0.00000000| FAILED
rgb_bitdist| 1| 100000| 100|0.00000000| FAILED
rgb_bitdist| 2| 100000| 100|0.00000000| FAILED
rgb_bitdist| 3| 100000| 100|0.00000000| FAILED
rgb_bitdist| 4| 100000| 100|0.00000000| FAILED
rgb_bitdist| 5| 100000| 100|0.00000000| FAILED
rgb_bitdist| 6| 100000| 100|0.00000000| FAILED
rgb_bitdist| 7| 100000| 100|0.00000000| FAILED
rgb_bitdist| 8| 100000| 100|0.00000000| FAILED
rgb_bitdist| 9| 100000| 100|0.00000000| FAILED
rgb_bitdist| 10| 100000| 100|0.00000000| FAILED
rgb_bitdist| 11| 100000| 100|0.00000000| FAILED
rgb_bitdist| 12| 100000| 100|0.00000000| FAILED
rgb_minimum_distance| 2| 10000| 1000|0.00000000| FAILED
rgb_minimum_distance| 3| 10000| 1000|0.00000000| FAILED
rgb_minimum_distance| 4| 10000| 1000|0.00000000| FAILED
rgb_minimum_distance| 5| 10000| 1000|0.00000000| FAILED
rgb_permutations| 2| 100000| 100|0.34071975| PASSED
rgb_permutations| 3| 100000| 100|0.41896992| PASSED
rgb_permutations| 4| 100000| 100|0.02984451| PASSED
rgb_permutations| 5| 100000| 100|0.00000002| FAILED
rgb_lagged_sum| 0| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 1| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 2| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 3| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 4| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 5| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 6| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 7| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 8| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 9| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 10| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 11| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 12| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 13| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 14| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 15| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 16| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 17| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 18| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 19| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 20| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 21| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 22| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 23| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 24| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 25| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 26| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 27| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 28| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 29| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 30| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 31| 1000000| 100|0.00000000| FAILED
rgb_lagged_sum| 32| 1000000| 100|0.00000000| FAILED
rgb_kstest_test| 0| 10000| 1000|0.00000000| FAILED
dab_bytedistrib| 0| 51200000| 1|0.00000000| FAILED
dab_dct| 256| 50000| 1|0.00000000| FAILED
Preparing to run test 207. ntuple = 0
dab_filltree| 32| 15000000| 1|0.00000000| FAILED
dab_filltree| 32| 15000000| 1|0.00000000| FAILED
Preparing to run test 208. ntuple = 0
dab_filltree2| 0| 5000000| 1|0.00000000| FAILED
dab_filltree2| 1| 5000000| 1|0.00000000| FAILED
Preparing to run test 209. ntuple = 0
dab_monobit2| 12| 65000000| 1|1.00000000| FAILED