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?
  • Data: 2023-05-15 14:03:13
    Temat: Re: Ile cykli zajmuje mnożenie liczb 64-bitowych?
    Od: Bogdan <b...@p...invalid> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 14/05/2023 16:39, o...@g...com wrote:
    > 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.
    >
    > 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

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: