eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak zrobić test za pomocą PractRand? › Re: Jak zrobić test za pomocą PractRand?
  • Data: 2021-08-20 18:14:52
    Temat: Re: Jak zrobić test za pomocą PractRand?
    Od: "o...@g...com" <o...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    > 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_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:

    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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: