- Učlanjen(a)
- 21.07.2003
- Poruke
- 3,894
- Poena
- 410
monteboy je napisao(la):Bilo kako bilo jedna od opcija je implicirala intrinsic, uglavnom nije ni jedna koju sam ti ja bio postovao.
Da ja sam probao u firmi iz VS2003 IDE-a gde je default /O2.
Ali to znaci da ti nisi uopste koristio jace optimizacije? Mislim na /O1 i /O2? Koliko sam video ni kompajleru je jedino default /Ot?
monteboy je napisao(la):Koliko se ja secam patch je bio za P4 Prescott i to SSE3 !, e sad u detalju ga neznam ni ja tako samo mozemo naslutiti sta je optimirano istim u svakom slucaju uporedjenje se ne moze izvrsiti na korektan nacin ako se modifikuje verzija benchmark'a u bilo kom smislu za pojedini procesor.
Bile su dve verzije -- northwood_pi (SSE2) i prescott_pi (SSE3).
Sustina oba patch-a je da se eliminise promena moda zaokruzivanja pri konverziji double u integer -- nista vise od toga. To se kod SSE3 patch-a se postize koriscenjem nove FPU instrukcije FISTTP umesto FISTP:
Kod:
Code without SSE3:
fstcw <old FCW>
movw ax, <old FCW>
or ax, 0xc00
movw <new FCW>, ax
fldcw <new FCW>
fistp <INT>
fldcw <old FCW>
Code with SSE3:
fisttp <INT>
Kod SSE2 patch-a se to isto postize uz pomoc instrukcije CVTTSD2SI i malo glue koda koji preuzima double vrednost sa stacka i vraca int. Sta god da je bilo u SSE2 patch-u izvrsavalo bi se i na P4 i na A64 tako da je takav test bilo moguce usvojiti kao validan.
monteboy je napisao(la):Pa vjerovatno utice i malo cinjenica da je moj sistem clocknut na 2650 Mhz sto bi znacilo 650 MHz vise od default takta. Ipak razlika je i sobzirom te cinjenice prevelika predpostavljam da A64 jednostavno bolje lezi MS kompilat veceras cu ti poslati source , onda mozes odradit optimizaciju za Intel interesantno bi bilo onda uporediti ASM instrukcije da se ustanovi gdje lezi problem.
Moguce, ja bih ti samo jos predlozio da za alokaciju nizova ipak koristis VirtualAlloc() umesto new posto ona garantuje poravnanje memorije na 4 KB (page size granularity) pa ce biti lakse implementirati eventualne optimizacije.