🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217883

Re: Ile cykli zajmuje mnożenie liczb 64-bitowych?

#217883
From: osobli...
Date: Sun, 14 May 2023 14:00
65 lines
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-mail
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>

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