• 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

Object Storage Arubacloud
0 głosów
327 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 (27,530 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 (27,530 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 83 wizyt
pytanie zadane 29 kwietnia 2020 w Inne języki przez fyrr Użytkownik (910 p.)
+1 głos
1 odpowiedź 275 wizyt
pytanie zadane 6 kwietnia 2022 w C# przez jakubmarek Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 120 wizyt
pytanie zadane 3 lutego 2022 w Offtop przez adzikowski Nowicjusz (140 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...