Article View: pl.comp.programming
Article #217886Re: Ile cykli zajmuje mnożenie liczb 64-bitowych?
From: Bogdan
Date: Mon, 15 May 2023 12:03
Date: Mon, 15 May 2023 12:03
47 lines
3545 bytes
3545 bytes
On 14/05/2023 16:39, osobli...@gmail.com wrote: > 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. > > To jest to samo co niejakie load/store time? Jeżeli w algorytmie mam: > > k = k + x; > > To dobrze rozumiem, że mam liczyć to jako 4 cykle? Bo jeden cykl na pobranie k, drugi cykl na pobranie x, trzeci cykl na dodawanie i czwarty cykl na przypisanie wyniku do k? Zależy od konkretnego modelu procesora i od poziomu optymalizacji. I od rozmiaru zmiennych, i od cache, i od ułożenia w pamięci. Jeśli 'k' jest 64-bitowe, to: 1) MOV 'k' z pamięci do rejestru = 2, MOV 'x' z pamięci do rejestru = 2, ADD = 1, potem ewentualne czekanie na wynik, potem MOV nowej wartości do pamięci = 3. 2) MOV 'x' z pamięci do rejestru = 2, ADD 'x' do 'k' w pamięci z rejestru = 6. Najlepiej mierzyć fizycznie, co jest najszybsze. Jak mierzenie jest trudne, to można chociaż zobaczyć, jakie instrukcje kompilator generuje (z różnymi poziomami optymalizacji i wyboru architektury docelowej) i dopiero mając je, wziąć tabele czasów instrukcji i liczyć. -- 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
Technical Details
Message-ID:
<u3t721$32043$2@dont-email.me>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!eternal-september.org!news.eternal-september.org!.POSTED!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> <c25f6d1d-8b3f-4abb-9f95-cc4f4e355474n@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Bogdan <bogdan@poczta.invalid> Newsgroups: pl.comp.programming Subject: Re: Ile cykli zajmuje mnożenie liczb 64-bitowych? Date: Mon, 15 May 2023 14:03:13 +0200 Organization: A noiseless patient Spider Lines: 48 Message-ID: <u3t721$32043$2@dont-email.me> 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> <c25f6d1d-8b3f-4abb-9f95-cc4f4e355474n@googlegroups.com> MIME-Version: 1.0 Injection-Date: Mon, 15 May 2023 12:03:14 -0000 (UTC) Injection-Info: dont-email.me; posting-host="61f9847acdcdff996a68c4e9d5cd9608"; logging-data="3211395"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Yjdq4ySo3h+qZZd2ZjqRd" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Cancel-Lock: sha1:hveaO9GmENoVsQ/TPwsvIrV8l5I= In-Reply-To: <c25f6d1d-8b3f-4abb-9f95-cc4f4e355474n@googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit