• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomiar prędkości dwóch generatorów PRNG

0 głosów
1,179 wizyt
pytanie zadane 30 maja 2023 w C i C++ przez osobliwy nick Użytkownik (900 p.)
Cześć. Mam dwa generatory PRNG:

https://prng.di.unimi.it/xoshiro256plusplus.c

i

https://prng.di.unimi.it/splitmix64.c

Wychodzi mi, że splimix64 jest szybszy niż xoroshiro. I to prawie 2 razy szybszy. A profesorowi Vignie wyszły tylko nieznaczne różnice:

https://prng.di.unimi.it

Podobnie wychodzi w https://quick-bench.com/q/kQWBmeTMcpn5OM5xB6xRqf_A_2s. Jakie czasy Wam wychodzą, czy splitmix64 jest znacznie szybszy?

1 odpowiedź

+2 głosów
odpowiedź 30 maja 2023 przez Gynvael Coldwind Nałogowiec (30,510 p.)
wybrane 31 maja 2023 przez osobliwy nick
 
Najlepsza

Ku mojemu zaskoczeniu wyszło praktycznie identycznie w obu przypadkach (jednostki to linuxowe "clocki" na 1mld liczb wygenerowanych):

Kod testujący:

#include "splitmix64.c"
#include "xoshiro256plusplus.c"
#include <stdio.h>
#include <time.h>

#define NNN 1000 000 000

int main(void) {

  uint64_t r = 123456789;

  while (1) {
    time_t tm = 0;

    tm = clock();
    for (int i = 0; i < NNN; i++) {
      r ^= xorshiro256pp_next();
    }
    tm = clock() - tm;
    printf("xorshiro256++ (%llx): %llu\n", r, tm);
    fflush(stdout);


    tm = clock();
    for (int i = 0; i < NNN; i++) {
      r ^= splitmix64_next();
    }
    tm = clock() - tm;
    printf("splitmix64 (%llx): %llu\n", r, tm);
    fflush(stdout);
  }


  return 0;
}

Stawiałem, że ten z mnożeniem będzie jednak wolniejszy, a tu proszę :)

Sprzęt: Core i7 6900K, Ubuntu 64-bit

komentarz 31 maja 2023 przez Gynvael Coldwind Nałogowiec (30,510 p.)
Zgadza się. #include to jest po prostu "kopiuj-wklej" z jednego pliku do drugiego (odpal sobie gcc -E na tym pliku, to Ci wygeneruje kod który trafia z preprocesora do kompilatora).
komentarz 31 maja 2023 przez osobliwy nick Użytkownik (900 p.)
Gdy wróciłem do moich testów, wyniki są takie same, tyle, że nie użyłem -O3. Więc to był problem od początku.
komentarz 4 czerwca 2023 przez osobliwy nick Użytkownik (900 p.)

@Gynvael Coldwind, skoro masz Linuxa sprawdziłbyś jeszcze jak się ma PCG do xoroshiro?

#include <iostream>

static __uint128_t LCG_state = 123456789;

uint64_t next_PCG(void)
{
    LCG_state = LCG_state * 0xda942042e4dd58b5 + 1;
    uint64_t hi = LCG_state >> 64;
    uint64_t lo = LCG_state;

    lo |= 1;
    hi ^= hi >> 32;
    hi *= 0xda942042e4dd58b5ULL;
    hi ^= hi >> 48;
    hi *= lo;
    return hi;
}

Według programistów Numpy są spore różnice pomiędzy Windowsem a Linuxem (pomimo tego samego sprzętu):

https://github.com/numpy/numpy/pull/13163#issuecomment-496030958

Ale nie potrafię odtworzyć ich wyników na konsoli Ubuntu dla Windows. Moje są zbliżone do wyników prof. Vigny (https://prng.di.unimi.it). Krótko pisząc - czy różnice między xoroshiro256++ a PCG faktycznie się zacierają na Linuxie.

 

komentarz 4 czerwca 2023 przez osobliwy nick Użytkownik (900 p.)
edycja 4 czerwca 2023 przez osobliwy nick

A no tak, ukryło mi poprzednie komentarze, zapomniałem, że to sprawdzałeś. Jeszcze tak ad vocem dlaczego mi to nie daje spokoju. Tutaj nikt inny jak twórczyni PCG pisze:

First, there is simply no way to pick “the fastest”. @bashtage ran some benchmarks on the current code in #13163 and it was all over the map, with dSFMT winning on Windows and being soundly beaten by PCG-64 and Xoroshiro 256 on Linux. And this is all on the same machine with the same benchmark.

Że programiście z Numpy wyszły różne wyniki na tym samym sprzęcie, ale w innym systemie:

https://github.com/numpy/numpy/pull/13163#issuecomment-496030958

Więc zacząłem mieć wątpliwości, czy na Linuxie wyniki nie są znacznie inne.

Podobne pytania

0 głosów
0 odpowiedzi 156 wizyt
pytanie zadane 29 kwietnia 2020 w Inne języki przez fyrr Użytkownik (910 p.)
+1 głos
1 odpowiedź 503 wizyt
pytanie zadane 6 kwietnia 2022 w C# przez jakubmarek Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 268 wizyt
pytanie zadane 3 lutego 2022 w Offtop przez adzikowski Nowicjusz (140 p.)

93,787 zapytań

142,750 odpowiedzi

323,421 komentarzy

63,392 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...