eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingIle cykli zajmuje mnożenie liczb 64-bitowych? › Re: Ile cykli zajmuje mnożenie liczb 64-bitowych?
  • X-Received: by 2002:a25:c507:0:b0:ba7:7bd5:e063 with SMTP id
    v7-20020a25c507000000b00ba77bd5e063mr2422319ybe.6.1684072810280; Sun, 14
    May 2023 07:00:10 -0700 (PDT)
    X-Received: by 2002:a25:c507:0:b0:ba7:7bd5:e063 with SMTP id
    v7-20020a25c507000000b00ba77bd5e063mr2422319ybe.6.1684072810280; Sun, 14
    May 2023 07:00:10 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
    e.net!feeder.erje.net!border-1.nntp.ord.giganews.com!nntp.giganews.com!news-out
    .google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!
    not-for-mail
    Newsgroups: pl.comp.programming
    Date: Sun, 14 May 2023 07:00:10 -0700 (PDT)
    In-Reply-To: <u3q9gj$2jdsa$1@dont-email.me>
    Injection-Info: google-groups.googlegroups.com; posting-host=92.67.160.10;
    posting-account=5sNFBgoAAAAxlae8lv99mPyGsDs6ynwB
    NNTP-Posting-Host: 92.67.160.10
    References: <9...@g...com>
    <u3o5jn$248lr$1@dont-email.me>
    <a...@g...com>
    <f...@g...com>
    <u3q9gj$2jdsa$1@dont-email.me>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <3...@g...com>
    Subject: Re: Ile cykli zajmuje mnożenie liczb 64-bitowych?
    From: "o...@g...com" <o...@g...com>
    Injection-Date: Sun, 14 May 2023 14:00:10 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Lines: 79
    Xref: news-archive.icm.edu.pl pl.comp.programming:215947
    [ ukryj nagłówki ]

    niedziela, 14 maja 2023 o 11:28:17 UTC+2 Bogdan napisał(a):
    > On 13/05/2023 19:43, o...@g...com wrote:
    > > Swoją drogą mierzę sobie względną szybkość generatorów PRNG za pomocą:
    > >
    > > https://quick-bench.com
    > >
    > > Jedyne sensowne zestawienie, po zliczeniu przez mnie ręcznie liczby cykli na
    operacje (wynik 22 do 13), które wykonują algorytmy, dostaję, gdy włączam optim=None.
    Jeżeli zaś włączę OFast xoroshiro dostaje takiego przyspieszenia, że wyprzedza drugi
    PRNG, według tego benchmarku.
    > >
    > > W samym xoroshiro liczę operację:
    > >
    > > const uint64_t s0 = s[0];
    > >
    > > jako jeden cykl, bo następuje wywołanie zmiennej z tablicy. Ale nie jestem
    pewien, czy to tak należy szacować.
    > To zależy od poziomu optymalizacji.
    > Bez optymalizacji na samo to wziąłbym 1 cykl na kopię z pamięci do
    > rejestru i 1 na kopię z rejestru do innej pamięci. Ale wspomniany
    > dokument podaje np. 3 cykle na kopiowanie do pamięci, więc nawet to
    > nie jest takie oczywiste.
    > Z optymalizacją jest szansa, że "s0" siedzi w rejestrze, więc
    > wystarczy pewnie 1 cykl na załadowanie.
    > Oczywiście, jeśli s[0] jest ułożone na równym adresie.
    > Oczywiście, jeśli s[0] siedzi w cache, bo jeśli nie, to w najgorszym
    > przypadku mogą być może dziesiątki, jak nie setki cykli na pobranie z
    > głównej pamięci.
    > I pewnie jeszcze różne inne warunki, więc tabelki tabelkami, ale
    > najlepiej albo pomierzyć (RDTSC), albo użyć narzędzi mówiących, co ile
    > potrwa (kiedyś było np. jakieś VTune Analyzer).
    > --
    > Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
    > Kurs asemblera x86 (DOS, GNU/Linux): http://bogdro.evai.pl
    > Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
    > www.Xiph.org www.TorProject.org Soft(EN): http://bogdro.evai.pl/soft

    Ok, czyli liczę to raczej prawidłowo. Przykładowe szacunki:

    class xoroshiro256plus {

    uint64_t s[4] = { 5, 11, 13, 99 };

    static uint64_t rotl(const uint64_t x, int k)
    {
    return (x << k) | (x >> (64 - k));
    }

    public:
    uint64_t next() noexcept
    {
    const uint64_t result = s[0] + s[3]; // 3 cycles

    const uint64_t t = s[1] << 17; // 2 cycles

    s[2] ^= s[0]; // 4 cycles
    s[3] ^= s[1]; // 4 cycles
    s[1] ^= s[2]; // 4 cycles
    s[0] ^= s[3]; // 4 cycles

    s[2] ^= t; // 2 cycles

    s[3] = rotl(s[3], 45); // 6 cycles

    return result;
    }
    };

    //Xoroshiro256+ ma 29 cykli.

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: