-
Data: 2021-08-20 19:26:39
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "M.M." <m...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On Friday, August 20, 2021 at 6:14:53 PM UTC+2, o...@g...com wrote:
> > 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.
Można ,ale dobre testowanie wymaga dużo danych. Osobiście testowałem generatory
minimum
godzinę, maksimum (o ile pamiętam) dwa tygodnie na jednym wątku. Przez ten czas,
szczególnie
przez dwa tygodnie, generator jest w stanie wygenerować sporo liczb i program testowy
sporo skonsumować.
Liczby z dwóch tygodni nie wiem czy zmieszczą się na dysku.
> Przepisanie kodu z Pythona do C++ musiałbym raczej komuś zlecić.
Co tam konkretnie jest do napisania? Może coś podobnego jest to gotowe pod linkami
które podałem?
> 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ę).
Niektóre kompilatory obsługują typ 128bitowy tak samo jak typ 64bitowy. Po
zainstalowaniu dobrej biblioteki w C++ używa się
typu N-bitowego tak samo jak np. 64bitowego.
> 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?
Zapis całego dużego dysku to np. jedna doba, ale zależy jaki szybki/duży dysk, może
być godzina, może być tydzień. Trudno
bez testów powiedzieć czy wolniejszy będzie zapis czy powolne generowanie najszybszym
generatorem na świecie. PractRand
tym lepiej testuje im więcej danych otrzyma. Jeśli jakiś generator, w jakimś
programie intensywnie pracuje przez długie tygodnie na
wielu wątkach, to testowanie generatora przez kilka dni może mieć sens. Można też
zapisać zarodki generatorów użyte w
programie, aby potem wykonać testy dokładnie tych samych ciągów losowych liczby jakie
były użyte.
> 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),
To możesz zapisać teraz 50GB na dysk z dev/zero przy użyciu dd i mieć przybliżony
narzut na obliczenia generatora.
> ż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".
Temat jest trudniejszy, może generator na małych zapętlonych danych przechodzić test,
na na długich oblewać.
Chyba najlepiej odtworzyć te same dane losowe co były użyte w programie, aby
mieć pewność że program
pracował na losowych danych które przechodzą testy statystyczne.
> > 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_Generat
ors_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:
Zadziała, ale jeśli tester nie wspomaga plików tekstowych, to trzeba samemu
napisać program który zamieni dane tekstowe na binarne.
Potem dam przykładowy kod w C++, może dziś wieczorem, to kilka linijek.
> 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.
Teraz nie mogę, potem dam kod program który przekonwertuje plik tekstowy do
binarnego. Proszę, pokaż ( i jeśli trzeba to opisz )
jak wygląda oryginalny plik tekstowy.
Pozdrawiam
Następne wpisy z tego wątku
- 20.08.21 20:45 o...@g...com
- 20.08.21 22:32 M.M.
- 20.08.21 23:56 o...@g...com
- 21.08.21 00:11 M.M.
- 21.08.21 00:20 o...@g...com
- 21.08.21 00:27 o...@g...com
- 21.08.21 00:49 M.M.
- 21.08.21 01:55 o...@g...com
- 21.08.21 11:40 M.M.
- 21.08.21 13:27 M.M.
- 21.08.21 16:53 o...@g...com
- 21.08.21 17:18 M.M.
- 21.08.21 17:51 o...@g...com
- 21.08.21 18:30 M.M.
- 21.08.21 19:16 o...@g...com
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-18 Kablówka z modułem CAM
- 2024-12-18 Warszawa => Spedytor międzynarodowy <=
- 2024-12-18 Wróblewo => Analityk finansowy <=
- 2024-12-18 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-12-18 Lublin => Delphi Programmer <=
- 2024-12-18 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-18 Gliwice => IT Expert (Network Systems area) <=
- 2024-12-18 Wrocław => Application Security Engineer <=
- 2024-12-18 Warszawa => Key Account Manager <=
- 2024-12-18 Alternatywny nośnik do monitoringu zamiast HDD?
- 2024-12-17 Rodzaj przekładni planetarnej z
- 2024-12-17 Z instrukcji do kitu
- 2024-12-17 Re: W telefonie brak szufladki na drugą kartę SIM
- 2024-12-17 nie wyrzucaj starych opon
- 2024-12-17 znów elektryk:P