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

Jak napisać i zmierzyć kod w Quick C++ Benchmark?

0 głosów
315 wizyt
pytanie zadane 25 marca 2022 w C i C++ przez osobliwy nick Użytkownik (900 p.)

Potrzebuję zmierzyć prędkości kilku generatorów PRNG. Podobno nadaje się do tego:

https://quick-bench.com

Generatory:

#include <iostream>

uint64_t LCG(uint64_t LCG_state)
{
    LCG_state = (LCG_state * 2862933555777941757 + 1422359891750319841);
    return LCG_state;
}

int main()
{

    uint64_t LCG_state = 333;
    uint32_t result;

    for(int i=0; i<640000000; i++)
    {
        LCG_state = LCG(LCG_state);
        result = LCG_state >> 32;
    }
}


#include <iostream>


static inline uint64_t rotl(const uint64_t x, int k) {
	return (x << k) | (x >> (64 - k));
}

static uint64_t s[2] = {9,5};

uint64_t next(void) {
	const uint64_t s0 = s[0];
	uint64_t s1 = s[1];
	const uint64_t result = s0 + s1;

	s1 ^= s0;
	s[0] = rotl(s0, 24) ^ s1 ^ (s1 << 16); // a, b
	s[1] = rotl(s1, 37); // c

	return result;
}

int main()
{
    uint64_t result;

    for(int i=0; i<320000000; i++)
    {
    result = next();
    }
}

Jak to zmierzyć za pomocą tej strony? A konkretnie jak ma wyglądać kod, który będzie w stanie zmierzyć ta strona. Nie można po prostu przekleić kodu. Najczęściej cokolwiek nie próbuję tam wstawić dostaję error: function definition is not allowed here. Cały kod opiera się na wywoływaniu pewnej funkcji, więc, jeśli definiowanie funkcji nie jest tam dozwolone, to co i jak mam tam zmierzyć? Nie znam sposobu iteracyjnego wywoływania funkcji bez zdefiniowania funkcji.

A może za pomocą tego narzędzia można mierzyć tylko równie krótkie i trywialne kawałki kodu jak w przykładzie: std::string x = "hello";?

2 odpowiedzi

0 głosów
odpowiedź 26 marca 2022 przez adrian17 Mentor (355,240 p.)

Nie można po prostu przekleić kodu.

Można, ale nie bez myślenia.

Widać po kodzie na stronie że używają frameworka Google Benchmark, więc proponuję poczytać ich oficjalne instrukcje:

https://github.com/google/benchmark#usage

https://github.com/google/benchmark/blob/main/docs/user_guide.md

0 głosów
odpowiedź 1 kwietnia 2022 przez osobliwy nick Użytkownik (900 p.)
Napisałem to tak:

https://quick-bench.com/q/--5R-rpUCT6oxLefErA_RnA3FIw

Ale dzieje się coś dziwnego. Kod bez włączonych flag jest szybszy, niż z flagami. Jak to możliwe?

Badam to w Clangu 9 i 10, bo z tymi kompilatorami wydaje się najszybszy.

Podobne pytania

0 głosów
0 odpowiedzi 410 wizyt
pytanie zadane 11 listopada 2020 w Python przez Ignpie Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 675 wizyt
pytanie zadane 28 marca 2018 w PHP przez Bartess Gaduła (3,630 p.)
0 głosów
0 odpowiedzi 210 wizyt
pytanie zadane 18 lipca 2017 w C# przez Paweł Romanoski Początkujący (340 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.

...