Citiraj:
Autor karlo10
P.S. Mislio sam o tome malo pisati (pozabaviti se) jer me oduvijek zanimalo kak radi neki bench program, a ovo mi se činila kao dobra prilika za to.
|
Nisi bas nasao neki trivijalan primjer onda.
Bilo kakav čmark radi tocno onako kako si ga
napisao (pogledaj cijeli thread za detalje).
Naravno, pitanje je sto zapravo zelis postici testiranjem, odnosno koje performanse u odnosu na sto pokazati.
Primjerice, ako zelis izmnoziti dvije kvadratne matrice, imas nekoliko izbora:
a) obican iterativni algoritam slozenosti O(n^3) - najgori scenarijo je
cache miss od O(n^3)
b) podijeli pa vladaj metoda koja ima jednaku slozenost ali je prikladna za multi-threading i ima
cache-obvious ponašanje - matrice podijelis na podmatrice i to obicno onliko koliko imas jezgara
c) vektorizacija (+ multithreading!), gdje primjerice mozes s 256 bitnom
VFMADD231PS instrukcijom skinuti 16 mnozenja i 8 zbrajanja jednim udarcem - VFMADD231PS radi $0 = $1×$2 + $0 (gdje su $x YMM registri), sto je upravo ono sto radis u standardnom algoritmu mnozenja matrica)
Naravno, sad je opet pitanje hoces li forsirati legacy x87 u prvom slucaju (gdje ces pokazati kako AMD de facto emulira x87 i spor je u legacy aplikacijama), ili ces sve podignuti (ti ili kompajler) barem na SSE razinu pa koristiti daleko brzi MULSS. Sada kada uzmes u obzir varijantu a) + x87 na AMD procesoru, mozes reci da se radi o fijasku.
Realno, ima li takav pristup puno smisla? Pa i ne bas, jer mozes podignuti algoritam za red velicine (racun je ovlasno okviran, nemoj me uzimati na detalj slozenosti jer je analiza brutalno kompleksna) drugacijim softverskim pristupom pa onda od govnjavog AMD-a napravis pitu od jabuke s cimetom i djecijim smijehom. Za isti racun - mnozenje dvije kvadratne matrice. Recimo, nesto sto se koristi (ne nuzno kvadratne matrice, ali matrice) od algoritama za kompresiju slike i videa pa do softverskih RAID polja i svaceg neceg drugog.
Zato u principu vecina tih benČmarkova kurcu ne vrijedi ako bas tocno ne znas za sto ti racunalo treba, odnosno u stanju si sam napisati svoj softver. Najbolje sto mozes dobiti je neki generalni (medju)generacijski dojam u performansama, ali one su ovisne i o softverskoj implementaciji, a ne samo o hardveru na kojem ih vrtis.