Article View: pl.comp.programming
Article #217883Re: Ile cykli zajmuje mnożenie liczb 64-bitowych?
From: osobli...
Date: Sun, 14 May 2023 14:00
Date: Sun, 14 May 2023 14:00
65 lines
4019 bytes
4019 bytes
niedziela, 14 maja 2023 o 11:28:17 UTC+2 Bogdan napisał(a):
> On 13/05/2023 19:43, osobli...@gmail.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.
Technical Details
Message-ID:
<3c017a78-5635-4b22-b9b7-cfb95b4a8428n@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!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-mailReferences:
<986309a4-5abd-46de-9d99-25bf51ba6144n@googlegroups.com> <u3o5jn$248lr$1@dont-email.me> <ae1c2360-6eb1-47bc-b3e1-9b5b58b8e7f3n@googlegroups.com> <f875c31f-359e-4600-82a1-396a79d88eb7n@googlegroups.com> <u3q9gj$2jdsa$1@dont-email.me>Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:3715:b0:74d:b098:6b80 with SMTP id de21-20020a05620a371500b0074db0986b80mr8743647qkb.4.1684072810673; 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: 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!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: <986309a4-5abd-46de-9d99-25bf51ba6144n@googlegroups.com> <u3o5jn$248lr$1@dont-email.me> <ae1c2360-6eb1-47bc-b3e1-9b5b58b8e7f3n@googlegroups.com> <f875c31f-359e-4600-82a1-396a79d88eb7n@googlegroups.com> <u3q9gj$2jdsa$1@dont-email.me> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <3c017a78-5635-4b22-b9b7-cfb95b4a8428n@googlegroups.com> Subject: Re: Ile cykli zajmuje mnożenie liczb 64-bitowych? From: "osobli...@gmail.com" <osobliwy.nick@gmail.com> Injection-Date: Sun, 14 May 2023 14:00:10 +0000 Lines: 79 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit