Citat:
Branimir Maksimovic: Tacno, ali to nece ti biti dovoljno posto moras da znas koji memorijski deo pripada jednom, drugom trecem procesoru i da alociras tako. [...]
Zapravo, nije bitan sam trenutak rezervisanja u programu, već koji procesor prvi dohvati određeni podatak, odnosno u petlji koja uspostavlja vrednosti — tek tada operativni sistem odredi gde će taj podatak zaista biti smešten, tj. stavi ga u deo memorije koji je najpristupačniji datom procesoru. (Doduše, svojim očima da vidim presudan uticaj ovoga na performanse, imao sam prilike samo na jednoj itanijumskoj NUMA mašini pod Linuksom...)
Citat:
[...] ali definitivno nesto ne valja posto time komanda vraca isto vreme i kad su jedan i kad su dva threada a imam dual, a meris samo read?
time vraća isto vreme zato što program skalira broj ponavljanja merne petlje po veličini vektora, kako bi održao neko razumno vreme izvršavanja za uprosečivanje rezultata. Zato brzinu daje u FLOP-ovima po sekundi.
Citat:
na osnovu merenja se vidi da omp ima neki overhead koji se eliminise kad je veci broj ciklusa [...]
Gubi se vreme na sinhronizaciju niti, npr. radi redukcije suma koje petlje računaju, i možda još po nešto (to je ono da je openMP malo vudu...) To se lako odrazi na performanse kad je petlja kratka, ali kad dođe do i preko 100.000, mislim da više nije od značaja.
Citat:
[...] i jos imas efekat kad podaci staju u cache i kad ne staju ;) E sad sta u stvari meris ovim benchmarkom ;)? brzinu cache-a, memorije? ili procesora.
Merim ono što je meni bitno, jasno :) Stvarni programi za koje mi je potrebna brzina takvi su da deo grafika od veličine 100.000 i naviše prilično dobro odmerava koliko će ih sistem brzo izvršavati. Znači, kad kupujem sistem, ne interesuje me: broj jezgara, arhitektura ovo-ono, kung-fu-bu, itd. već me interesuje šta kaže druga polovina ovih grafika (i još ponekih). Ovo znači da u razmatranje ulazi ne samo hardver, već i operativni sistem i kompilator, kao što i treba.
Ali je poenta upravo da pokažem da nije smisleno meriti „brzinu procesora“
ili „brzinu memorije“
ili „brzinu keša“, već da, ako se već za to ne koriste krajnji programi od značaja, onda treba sastaviti modelsko odmeravanje koje koliko-toliko podražava njihove zahteve.
Nego, koji je to tačno sistem za koji si ispostavio rezultate? Ovaj C2D E6600 koji je meni pri ruci ima magistralu 266 i daje ~650 MFLOPS za petlju 0 (grafici u prilogu) van keša, što bi trebalo da se prenese na ~1000 MFLOPS za magistralu 400, odnosno ~1300 MFLOPS za 533. Hoću reći, pošto kod tebe vidim ~1100 MFLOPS, ako ti je magistrala 400, nije malo tih 10% preko očekivanog :)