Praktycznie zawsze uważałem, że losowe odczyty powinny być szybsze od losowych zapisów. Myślałem, że zawsze jeżeli chcę zapisać sobie jakąś wartość do RAMu to procesor najpierw musi załadować linię pamięci systemowej do pamięci podręcznej (linia to dzisiaj ok 64 bajty), podmienić stosowny bajt (czy słowo) i zapisać tą linię z powrotem do pamięci. Niestety (a może stety) okazało się, że na moim systemie (tzn oprogramowanie + sprzęt) losowe zapisy są dużo szybsze.
Programik do testowania jest tutaj: https://ideone.com/6Ddrx (WAŻNE: dodałem Mersenne Twister, poprzednie wersje używały rand(), który się do niczego nie nadaje)
Wobec tego mam małą prośbę - abyście odpalili programik, który tu zamieściłem, oraz podali wyniki, wraz z opisem CPU, RAM, systemu operacyjnego i kompilatora. Najlepiej odpalcie kilka razy i podajcie najbardziej reprezentatywne wyniki (te najbardziej powtarzalne na przykład).
Mój wynik to:
1000000
700000
787058355
3450000
-59746632
4910000
A system to:
CPU: Intel Core 2 E8400, 3.00 GHz
RAM: 8 GiB, DDR2 800 MHz, CL5, dual-channel
OS: Ubuntu 10.10 64-bit
Kompilator: GCC 4.4.4, 64-bitowa binarka wyjściowa, opcje kompilacji: -O3
Jak widać stosunek prędkości losowych zapisów do prędkości losowych odczytów jest inny niż ten na systemie wykorzystywanym przez ideone.com. Interesuje mnie jaki jest stosunek tych prędkości na różnych systemach.
Aktualizacja - wyniki na netbooku:
CPU: AMD Zacate E-350, 1.60 GHz
RAM: 4 GiB, DDR3 1066 MHz, single-channel
OS: Ubuntu 11.04 64-bit
Kompilator: GCC 4.5.2, 64-bitowa binarka wyjściowa, opcje kompilacji: -O3
1000000
2060000
787058355
20500000
-59746632
20690000