eGospodarka.pl

eGospodarka.plGrupypl.comp.programmingJak zrobić test za pomocą PractRand? › Re: Jak zrobić test za pomocą PractRand?
  • X-Received: by 2002:a05:620a:1a0a:: with SMTP id bk10mr9725706qkb.274.1629480399493;
    Fri, 20 Aug 2021 10:26:39 -0700 (PDT)
    X-Received: by 2002:a05:620a:1a0a:: with SMTP id bk10mr9725706qkb.274.1629480399493;
    Fri, 20 Aug 2021 10:26:39 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!news-out.google.com!nntp.g
    oogle.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Fri, 20 Aug 2021 10:26:39 -0700 (PDT)
    In-Reply-To: <5...@g...com>
    Injection-Info: google-groups.googlegroups.com; posting-host=37.128.16.171;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 37.128.16.171
    References: <6...@g...com>
    <0...@g...com>
    <1...@g...com>
    <f...@g...com>
    <5...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <2...@g...com>
    Subject: Re: Jak zrobić test za pomocą PractRand?
    From: "M.M." <m...@g...com>
    Injection-Date: Fri, 20 Aug 2021 17:26:39 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:215501
    [ ukryj 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

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: