math KO!
Palasik Sandor
palasik at mail.datanet.hu
Fri Oct 29 10:53:15 CEST 2004
> Tapasztalataim szerint igen nagy teljesítménybeli különbség tud lenni
> akkor, ha a matematikai processzor olyan számmal dolgozik, melynek
> lebegőpontos ábrázolásában: a*2^b , b>=1024 vagy b<-1022. A jelenség
> akkor áll fenn, ha a kiindulási vagy a végeredmény beleesik ebbe a
> tartományba.
> A jelenség op-rendszer és fordító független. (ugyanozon a gépen
> winXP/dotnet és lin/gcc alatt is egyformán lassabb)
Csináltam én is tesztet. Ugyanúgy egy 2^X számot szoroztam önmagával. Az
volt az érzésem, hogy valahol az eredmény exponense körül lehet valami
trükk, ha az túl nagy vagy túl kicsi. Ezért csináltam két verziót: a POP
kezdetű soroknál nem tárolom az eredményt, a STORE kezdetűeknél igen.
A POP kódja:
00121 dd 45 a0 fld QWORD PTR _d$42616[ebp]
00124 dc 4d a0 fmul QWORD PTR _d$42616[ebp]
00127 dd c0 ffree ST(0)
00129 d9 f7 fincstp
A STORE kódja:
000fa dd 45 a0 fld QWORD PTR _d$42616[ebp]
000fd dc 4d a0 fmul QWORD PTR _d$42616[ebp]
00100 dd 5d b8 fstp QWORD PTR _k$[ebp]
A következőket mértem:
Athlon XP 2200+:
pop -1025: 2.39e+004 mul/sec
pop -1024: 2.28e+004 mul/sec
pop -1023: 2.26e+004 mul/sec
pop -513: 3.99e+005 mul/sec
pop -512: 3.95e+005 mul/sec
pop -511: 4.24e+005 mul/sec
pop -257: 4.09e+005 mul/sec
pop -256: 3.86e+005 mul/sec
pop -255: 4.29e+005 mul/sec
pop 255: 4.04e+005 mul/sec
pop 256: 4.04e+005 mul/sec
pop 257: 4.04e+005 mul/sec
pop 511: 4.04e+005 mul/sec
pop 512: 3.9e+005 mul/sec
pop 513: 3.99e+005 mul/sec
pop 1023: 4.09e+005 mul/sec
pop 1024: 3.95e+005 mul/sec
pop 1025: 4.19e+005 mul/sec
store -1025: 1.63e+004 mul/sec
store -1024: 1.55e+004 mul/sec
store -1023: 1.56e+004 mul/sec
store -513: 1.58e+004 mul/sec
store -512: 1.51e+004 mul/sec
store -511: 8.18e+005 mul/sec
store -257: 8e+005 mul/sec
store -256: 8.48e+005 mul/sec
store -255: 8.48e+005 mul/sec
store 255: 8.59e+005 mul/sec
store 256: 8.18e+005 mul/sec
store 257: 8.18e+005 mul/sec
store 511: 8.59e+005 mul/sec
store 512: 8.49e+005 mul/sec
store 513: 8.59e+005 mul/sec
store 1023: 8.48e+005 mul/sec
store 1024: 8.38e+005 mul/sec
store 1025: 8.48e+005 mul/sec
C4 2400:
pop -1025: 1.51e+003 mul/sec
pop -1024: 1.49e+003 mul/sec
pop -1023: 1.51e+003 mul/sec
pop -513: 5.68e+005 mul/sec
pop -512: 5.73e+005 mul/sec
pop -511: 5.68e+005 mul/sec
pop -257: 5.73e+005 mul/sec
pop -256: 5.68e+005 mul/sec
pop -255: 5.73e+005 mul/sec
pop 255: 5.68e+005 mul/sec
pop 256: 5.73e+005 mul/sec
pop 257: 5.68e+005 mul/sec
pop 511: 5.73e+005 mul/sec
pop 512: 5.68e+005 mul/sec
pop 513: 5.73e+005 mul/sec
pop 1023: 5.68e+005 mul/sec
pop 1024: 2.83e+003 mul/sec
pop 1025: 2.83e+003 mul/sec
store -1025: 3.44e+003 mul/sec
store -1024: 3.44e+003 mul/sec
store -1023: 3.44e+003 mul/sec
store -513: 3.4e+003 mul/sec
store -512: 3.4e+003 mul/sec
store -511: 6.87e+005 mul/sec
store -257: 6.87e+005 mul/sec
store -256: 6.87e+005 mul/sec
store -255: 6.87e+005 mul/sec
store 255: 6.87e+005 mul/sec
store 256: 6.87e+005 mul/sec
store 257: 6.87e+005 mul/sec
store 511: 6.87e+005 mul/sec
store 512: 3.36e+003 mul/sec
store 513: 3.36e+003 mul/sec
store 1023: 3.36e+003 mul/sec
store 1024: 6.87e+005 mul/sec
store 1025: 6.87e+005 mul/sec
Nekem úgy tűnik, mintha az eredmények normalizálásával lenne gond. Ha túl
nagy, vagy túl kicsi, akkor tovább tart neki double-ba konvertálni. Ha
tippelnem kéne, valami limitek vannak a math processzorban, amiken belül
izomból csinálja a műveleteket, de ha azokon kívül esik, akkor valami
mikroprogram, esetleg operációs rendszerbeli exception keletkezik és az
lassítja.
Palasik Sándor
More information about the Elektro
mailing list