Ciekawa kwestia. Takie dwie uwagi z boku, od osoby, która NIE JEST ekspertem w dziedzinie PRNG, ani nawet w dziedzinie takich pomiarów. Swego czasu też próbowałem mierzyć efektywność różnych algorytmów i stąd moje obecne uwagi. Nie należy ich traktować jako autorytatywnej odpowiedzi - raczej jako pewien głos w dyskusji.
1) Jeśli mierzysz prędkość, to czy uwzględniasz w jakiś sposób wpływ innych procesów działających w systemie operacyjnym na wyniki pomiarów? Jak można wyeliminować, albo choćby oszacować ten "szum"?
Jest to o tyle istotne, że gdyby ktoś zechciał odtworzyć Twoje wyniki (a to jest sens wszystkich badań naukowych), to powinno być to możliwe.
Pytanie takie zadawałem zawsze moim kolegom, zajmującym się m.in. pomiarami szybkości działania różnych procedur przetwarzania obrazów - i nigdy nie uzyskałem na nie satysfakcjonującej odpowiedzi. (Z drugiej strony nie sądzę, aby ta kwestia była bardzo istotna w takich badaniach, więc moje uwagi nie miały charakteru mocno krytycznego.)
Żeby była jasność, o czym piszę: uruchamiam sobie program do pomiarów, a w tle działa mi przeglądarka, z której akurat korzystam. Raz mogę mieć otwartych 10 zakładek, innym razem nawet 50. Jak to wpłynie na wynik pomiarów?
2) Odnośnie tego >>function call<< czy >>function inlining<<, to jako bardziej praktyk, niż teoretyk, zadałbym proste pytanie: który przypadek jest bardziej realistyczny?
Rozumiem, że na potrzeby badań można rozważyć >>function inlining<<, ale w produkcyjnym kodzie może być różnie. Będzie to zależało od tego, jak skompilujemy program, co będzie ważne w konkretnym przypadku. (Wyczytałem nawet kiedyś, że są kompilatory, które same podejmują tego typu decyzje.) Nie zawsze >>function inlining<< będzie najlepszym (najbardziej miarodajnym) rozwiązaniem. Czy wówczas wyniki badań, zrobionych w warunkach >>function inlining<<, będzie można wyrzucić do kosza?
W praktyce może być różnie. A skoro tak, to nie można a priori założyć, że badania zrobione dla >>function call<< są niewiarygodne, bo należało je zrobić dla >>function inlining<<. Należałoby raczej rozpatrzyć problem w obydwu skrajnych przypadkach.
Radziłbym przy tym odpowiednio dobrać kompilator, aby mieć nad tym kontrolę. (Swoją drogą, wcale bym się nie zdziwił, gdyby różne kompilatory, na różnych procesorach, dawały różne wyniki.)
Artykułów autorstwa wspomnianych ekspertów nie czytałem (i nie przeczytam - nie moja działka, brak czasu), ale czy ta krytyka nie dotyczy raczej samej metody badawczej? Jeśli będziesz robił badania stosując inlining, a ja zrobię swoje stosując function call, to wiadomo, że moje wyniki wykażą dłuższe czasy. Rzecz w tym, że takich wyników nie należy w ogóle porównywać.
Jeśli robisz badania na własne potrzeby, należałoby dobrać JEDNĄ metodę badawczą i trzymać się jej konsekwentnie.
3) Tak zupełnie na luźno:
Mam 3 generatory PRNG, których czasy chcę zmierzyć.
Takie sformułowanie na forum przejdzie, ale w pracy naukowej już nie. Bo co to jest czas PRNG?
Zresztą dalej piszesz, że mierzysz szybkość generacji losowych bitów przez różne PRNG - i to już ma sens.