🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217482

Re: Jak zrobić test za pomocą PractRand?

#217482
From: osobli...
Date: Fri, 20 Aug 2021 16:14
142 lines
12611 bytes
> Odnośnie C++ właśnie wkleiłem kluczową linię kodu:
> fwrite( buf, 1, sizeof(buf), stdout );
> Lina ta wywala binarnie bufor na standardowe wyjście, wcześniej trzeba go zapełnić binarnymi danymi. W pliku do którego 
> dałem link jest pełny przykład.
> 
> Odnośnie Practrand ta linia jest kluczowa:
> { time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time
> Przekierowuje ona standardowe wyjście programu do programu PractRand, reszta to opcje, pomiar czasu, przekierowanie wyników. 
> 
> W skrócie, jeśli PractRand jest w tym samym katalogu co program, uruchamia się to tak: 
> ./Program | ./PractRand stdin [tu wpisz opcje PractRand] 

Wydaje mi się, że prędzej, niż ogarnę C++ zrobię odpowiedni plik. Przepisanie kodu z Pythona do C++ musiałbym raczej komuś zlecić. Także chyba z pisaniem programu w C++ dam sobie spokój (tym bardziej, że mój program wykonuje operacje na liczbach 128-bitowych, a C++ takich nie obsługuje, zaś zainstalowanie odpowiedniej biblioteki do obsługi tak dużych liczb, to już jest dla mnie zadanie na długie tygodnie, może miesiące, bez gwarancji sukcesu - gdy próbowałem zrobić to lata temu nie udało się). Pytanie, czy będę w stanie wygenerować odpowiedni plik w odpowiednim czasie (bo pomimo, że generatory, które testuję są jednymi z najszybszych na świecie, co do zasady są podobne do PCG generators, to Python nie dość, że bywa 50-100 razy wolniejszy niż C++, to jeszcze do tego sam zapis do pliku trwa długo i jak szybki nie byłby generator - nie da się tego procesu przyspieszyć). Ile PractRand potrzebuje danych?

Dieharder przykładowo potrzebował 32-bitowe liczby wypisane jedna pod drugą w ilości blisko 50 GB (których zapisanie do pliku i wygenerowanie trwało kilka godzin), żeby generator nie oblewał testów (gdy danych było za mało plik był zawijany i do testów był brane w kółko te same liczby, do powodowało oblewanie testów). A i tak zawijał niektóre próbki, tzw. " rewounds".

> Jeśli dane są w pliku binarnym to tak: 
> cat dane_binarne.bin | ./PractRand stdin [tu wpisz opcje PractRand] 

Jak utworzyć plik .bin? Mam 50GB danych binarnych, to jest zera i jedynki w formie .txt. Ale pliki .bin to chyba coś innego?

> Jeśli w są w tekstowym, to np. tak (nie wiem czy można prościej, by musiała być odpowiednia 
> opcja PractRand i odpowiedni format danych tekstowych - może jest): 
> cat dane_tekstowe.txt | ./zamien_na_binarne | ./PractRand stdin [tu wpisz opcje PractRand] 
> Ale program który poprawnie zamieni Twoje dane tekstowe na dane binarne musisz napisać sobie sam. 

Tutaj piszą:

https://www.researchgate.net/publication/340214294_A_Practical_Approach_to_Testing_Random_Number_Generators_in_Computer_Algebra_Systems

że:

"For testing data from a file, the fol-lowing command can be used:

cat file.data | RNG_test stdin64

The data in the file must be binary; text files are not supported."

Że pliki tekstowe nie są akceptowane, więc, czy na pewno można to tak zrobić i to zadziała poprawnie? Same testy mi się wykonały, ale mam dużo FAILI:

rng=RNG_stdin, seed=0x8117bdda
length= 256 megabytes (2^28 bytes), time= 2.9 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-2,T)                  R=+27538479 p = 0           FAIL !!!!!!!!
  BCFN(2+1,13-2,T)                  R=+13016562 p = 0           FAIL !!!!!!!!
  BCFN(2+2,13-3,T)                  R=+8037376 p = 0           FAIL !!!!!!!!
  BCFN(2+3,13-3,T)                  R=+3903883 p = 0           FAIL !!!!!!!!
  BCFN(2+4,13-3,T)                  R=+1911999 p = 0           FAIL !!!!!!!!
  BCFN(2+5,13-4,T)                  R=+1199616 p = 0           FAIL !!!!!!!!
  BCFN(2+6,13-5,T)                  R=+746903 p = 0           FAIL !!!!!!!!
  BCFN(2+7,13-5,T)                  R=+370686 p = 0           FAIL !!!!!!!!
  BCFN(2+8,13-6,T)                  R=+228593 p = 0           FAIL !!!!!!!!
  BCFN(2+9,13-6,T)                  R=+113862 p = 0           FAIL !!!!!!!!
  BCFN(2+10,13-7,T)                 R=+69095  p = 0           FAIL !!!!!!!!
  BCFN(2+11,13-8,T)                 R=+40957  p = 0           FAIL !!!!!!!!
  BCFN(2+12,13-8,T)                 R=+20441  p =  1e-5188    FAIL !!!!!!!!
  BCFN(2+13,13-9,T)                 R=+11734  p =  8e-2638    FAIL !!!!!!!!
  BCFN(2+14,13-9,T)                 R= +5853  p =  3e-1316    FAIL !!!!!!!!
  DC6-9x1Bytes-1                    R=+13379089 p = 0           FAIL !!!!!!!!
  Gap-16:A                          R=+5676902 p = 0           FAIL !!!!!!!!
  Gap-16:B                          R=+25156958 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(0,14-0)              R=+9523586 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(4,14-1)              R=+11217844 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:all                   R=+16607352 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:cross                 R=+56967921 p = 0           FAIL !!!!!!!!
  BRank(12):128(4)                  R= +4568  p~=  2e-2430    FAIL !!!!!!!!
  BRank(12):256(4)                  R= +9390  p~=  6e-4995    FAIL !!!!!!!!
  BRank(12):384(1)                  R= +7106  p~=  3e-2140    FAIL !!!!!!!!
  BRank(12):512(2)                  R=+13459  p~=  1e-4052    FAIL !!!!!!!!
  BRank(12):768(1)                  R=+14339  p~=  1e-4317    FAIL !!!!!!!!
  BRank(12):1K(2)                   R=+27098  p~=  2e-8158    FAIL !!!!!!!!
  BRank(12):1536(1)                 R=+28805  p~=  2e-8672    FAIL !!!!!!!!
  BRank(12):2K(1)                   R=+38450  p~= 0           FAIL !!!!!!!!
  [Low1/8]BCFN(2+0,13-4,T)          R= +4290  p =  2e-1874    FAIL !!!!!!!!
  [Low1/8]BCFN(2+1,13-4,T)          R= +4280  p =  4e-1870    FAIL !!!!!!!!
  [Low1/8]BCFN(2+2,13-5,T)          R= +5376  p =  1e-2104    FAIL !!!!!!!!
  [Low1/8]BCFN(2+3,13-5,T)          R= +5322  p =  1e-2083    FAIL !!!!!!!!
  [Low1/8]BCFN(2+4,13-5,T)          R= +5216  p =  4e-2042    FAIL !!!!!!!!
  [Low1/8]BCFN(2+5,13-6,T)          R= +6417  p =  4e-2198    FAIL !!!!!!!!
  [Low1/8]BCFN(2+6,13-6,T)          R= +6363  p =  1e-2179    FAIL !!!!!!!!
  [Low1/8]BCFN(2+7,13-7,T)          R= +7512  p =  4e-2260    FAIL !!!!!!!!
  [Low1/8]BCFN(2+8,13-8,T)          R= +8494  p =  1e-2156    FAIL !!!!!!!!
  [Low1/8]BCFN(2+9,13-8,T)          R= +7611  p =  1e-1932    FAIL !!!!!!!!
  [Low1/8]BCFN(2+10,13-9,T)         R= +7064  p =  2e-1588    FAIL !!!!!!!!
  [Low1/8]BCFN(2+11,13-9,T)         R= +4936  p =  3e-1110    FAIL !!!!!!!!
  [Low1/8]DC6-9x1Bytes-1            R=+391.8  p =  4.9e-263   FAIL !!!!!!
  [Low1/8]FPF-14+6/16:(0,14-0)      R= +56.6  p =  1.0e-51    FAIL !!!!
  [Low1/8]FPF-14+6/16:(1,14-1)      R= +39.1  p =  1.9e-34    FAIL !!!
  [Low1/8]FPF-14+6/16:(2,14-2)      R= +24.1  p =  7.6e-21    FAIL !
  [Low1/8]FPF-14+6/16:(3,14-2)      R= +11.6  p =  6.6e-10  very suspicious
  [Low1/8]FPF-14+6/16:all           R= +80.5  p =  4.7e-75    FAIL !!!!
  [Low1/8]FPF-14+6/16:all2          R= +1234  p =  8.7e-437   FAIL !!!!!!!
  [Low1/8]FPF-14+6/16:cross         R=+347.9  p =  4.3e-274   FAIL !!!!!!
  [Low4/32]BCFN(2+0,13-4,T)         R=+5636982 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+1,13-4,T)         R=+2664412 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+2,13-5,T)         R=+1609820 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+3,13-5,T)         R=+781907 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+4,13-5,T)         R=+382945 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+5,13-6,T)         R=+233930 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+6,13-6,T)         R=+115740 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+7,13-7,T)         R=+69900  p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+8,13-8,T)         R=+41294  p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+9,13-8,T)         R=+20560  p =  6e-5219    FAIL !!!!!!!!
  [Low4/32]BCFN(2+10,13-9,T)        R=+11783  p =  1e-2648    FAIL !!!!!!!!
  [Low4/32]BCFN(2+11,13-9,T)        R= +5870  p =  4e-1320    FAIL !!!!!!!!
  [Low4/32]DC6-9x1Bytes-1           R=+2399367 p = 0           FAIL !!!!!!!!
  [Low4/32]Gap-16:A                 R=+756848 p = 0           FAIL !!!!!!!!
  [Low4/32]Gap-16:B                 R=+4597397 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(0,14-0)     R=+1007012 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(4,14-3)     R=+1156867 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(8,14-6)     R=+1083851 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(12,14-9)    R=+1027154 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:all          R=+1913749 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:all2         R=+1775316442517 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:cross        R=+10872050 p = 0           FAIL !!!!!!!!
  [Low4/32]BRank(12):128(4)         R= +3922  p~=  8e-2087    FAIL !!!!!!!!
  [Low4/32]BRank(12):256(2)         R= +5696  p~=  1e-1715    FAIL !!!!!!!!
  [Low4/32]BRank(12):384(1)         R= +6094  p~=  1e-1835    FAIL !!!!!!!!
  [Low4/32]BRank(12):512(2)         R=+11541  p~=  2e-3475    FAIL !!!!!!!!
  [Low4/32]BRank(12):768(1)         R=+12294  p~=  6e-3702    FAIL !!!!!!!!
  [Low4/32]BRank(12):1K(1)          R=+16427  p~=  3e-4946    FAIL !!!!!!!!
  [Low1/32]BCFN(2+0,13-5,T)         R= +1333  p =  5.0e-522   FAIL !!!!!!!
  [Low1/32]BCFN(2+1,13-5,T)         R= +1309  p =  1.3e-512   FAIL !!!!!!!
  [Low1/32]BCFN(2+2,13-6,T)         R= +1678  p =  4.5e-575   FAIL !!!!!!!
  [Low1/32]BCFN(2+3,13-6,T)         R= +1603  p =  1.6e-549   FAIL !!!!!!!
  [Low1/32]BCFN(2+4,13-6,T)         R= +1599  p =  6.2e-548   FAIL !!!!!!!
  [Low1/32]BCFN(2+5,13-7,T)         R= +1945  p =  1.3e-585   FAIL !!!!!!!
  [Low1/32]BCFN(2+6,13-8,T)         R= +2317  p =  6.9e-589   FAIL !!!!!!!
  [Low1/32]BCFN(2+7,13-8,T)         R= +2195  p =  5.7e-558   FAIL !!!!!!!
  [Low1/32]BCFN(2+8,13-9,T)         R= +2337  p =  2.7e-526   FAIL !!!!!!!
  [Low1/32]BCFN(2+9,13-9,T)         R= +2193  p =  6.4e-494   FAIL !!!!!!!
  [Low1/32]DC6-9x1Bytes-1           R=+126.7  p =  8.2e-67    FAIL !!!!
  [Low1/32]FPF-14+6/16:(0,14-2)     R= +22.0  p =  4.9e-19    FAIL !
  [Low1/32]FPF-14+6/16:(1,14-2)     R= +12.1  p =  2.1e-10   VERY SUSPICIOUS
  [Low1/32]FPF-14+6/16:(2,14-3)     R=  +9.0  p =  1.1e-7   suspicious
  [Low1/32]FPF-14+6/16:(3,14-4)     R=  +6.8  p =  1.8e-5   unusual
  [Low1/32]FPF-14+6/16:all          R= +29.9  p =  1.0e-26    FAIL !!
  [Low1/32]FPF-14+6/16:all2         R=+151.1  p =  3.4e-53    FAIL !!!!
  [Low1/32]FPF-14+6/16:cross        R= +95.9  p =  4.0e-78    FAIL !!!!
  ...and 36 test result(s) without anomalies

Co więcej w ten sposób PractRand przyjął też plik z wypisanymi liczbami 32-bitowymi jedna pod drugą w formacie dziesiętnym i też pokazał jakieś FAILE. Pytanie co program testuje, skoro plik był w nieodpowiednim formacie. Mam podejrzenia, że nie robi testów w sposób poprawny.
Technical Details
Message-ID: <59524bbe-00b1-4756-b359-19bb000e8641n@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <6a2d60cf-5d52-4f70-a0bb-67ac51f2ea47n@googlegroups.com> <0b0e0278-0506-4691-8051-1f73a327e87an@googlegroups.com> <1aabf0e1-8c01-4479-90fc-62d1026d221cn@googlegroups.com> <fcda7316-c8b0-445b-a5d5-2c8db0e2c939n@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:9e11:: with SMTP id h17mr9710058qke.370.1629476092988;        Fri, 20 Aug 2021 09:14:52 -0700 (PDT)
X-Received: by 2002:a37:6317:: with SMTP id x23mr9621176qkb.432.1629476092822; Fri, 20 Aug 2021 09:14:52 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Fri, 20 Aug 2021 09:14:52 -0700 (PDT)
In-Reply-To: <fcda7316-c8b0-445b-a5d5-2c8db0e2c939n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=77.169.12.87; posting-account=5sNFBgoAAAAxlae8lv99mPyGsDs6ynwB
NNTP-Posting-Host: 77.169.12.87
References: <6a2d60cf-5d52-4f70-a0bb-67ac51f2ea47n@googlegroups.com> <0b0e0278-0506-4691-8051-1f73a327e87an@googlegroups.com> <1aabf0e1-8c01-4479-90fc-62d1026d221cn@googlegroups.com> <fcda7316-c8b0-445b-a5d5-2c8db0e2c939n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <59524bbe-00b1-4756-b359-19bb000e8641n@googlegroups.com>
Subject: Re: Jak zrobić test za pomocą
 PractRand?
From: "osobli...@gmail.com" <osobliwy.nick@gmail.com>
Injection-Date: Fri, 20 Aug 2021 16:14:52 +0000
X-Received-Bytes: 13706
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit