Ok, am creat infrastructura pentru contestul de benchmarking despre care vorbeam ceva mai devreme.
Este format din două componente, un generator de numere zecimale aleatoare, care scrie intr-un fisier 10,000,000 de perechi de numere + rezultatul împărţirii dintre ele (asta are 8 zecimale). Câmpurile sunt separate prin tab-uri (’\t’), iar rândurile cu terminator de tip UNIX (LF - ‘\n’).
Asta va funcţiona doar pe OS-uri UNIX-like, pentru ca citeşte din /dev/urandom. E şi ăsta un benchmark bun, ar fi interesant de văzut cu ce viteză se poate crea un fişiere de numere aleatoare pe alte SO-uri şi pe alte limbaje de programarea.
A doua componentă este benchmark-ul în sine. Este un proof-of-concept, nu am făcut niciun efort de o optimiza în vreun fel. Ce face: citeşte linie cu linie fişierul “random_numbers.txt” generat de generator, sparge linia în tokeni ca să extragă deîmpărţitul şi împărţitorul, execută împărţirea, converteşte în string rezultatul împărţirii şi compară cu rezultatul original. Dacă totul e ok, scrie linia în “result.txt” şi trece mai departe, până se termină fişierul sursă.
Atenţie la compararea directă între numere de tip “float” sau “duble”. Nu sunt sigur cum este în alte limbaje, dar în C/C++ uneori 1.0 NU este egal cu 1.0. Pentru că numele de tip “float” sunt doar aproximări, uneori egalităţile nu sunt chiar egalităţi. Din acest motiv am optat să compar stringurile între ele, nu direct float-urile.
Codul sursă îl puteţi descărca de aici: https://github.com/serghei/benchmark-contest-devforum
Rezultatele mele, pe maşina cu CPU i7 este următorul:
./generator
Au fost generate 10000000 de perechi de numere aleatoare în 17 secunde.
Se genereaza md5sum...
10b6e2012df3a777fb254c30b8d6e4f1 random_numbers.txt
./benchmark
Au procesate 10000000 de perechi de numere aleatoare în 10 secunde.
Se genereaza md5sum...
10b6e2012df3a777fb254c30b8d6e4f1 result.txt
Chiar sunt curios ce rezultate veţi obţine pe alte platforme şi cu alte limbaje. Dacă nu aveti cum să generaţi tabelul de numere aleatoare, o sa uploadez eu unul în curând.
LE: Fişierul cu numere aleatoare se poate descărca de aici: random_numbers.txt.zip