Hirdetés

2024. április 20., szombat

Gyorskeresés

Hozzászólások

(#15) P.H.


P.H.
senior tag

Azt hiszem, elérhetetlen céljaim egyike, hogy a Netburst-öt megértsem...

Prescott CeleronD: 630M clock (-4%)
K8 Opteron: 585M clock (+4%)

Csupán két utasítás sorrendjének felcserélésével (melynek mellékhatásaként a memóriaparaméteres PSHUFD 3 millió helyett 6 milliószor fut le).

K8 analízis (túl sok a VectorPath):

@copyarraySSE: //
movd xmm0,[eax+04h] // 9/- FPUvector
@zoomvertSSE: //
mov [esp],edi // 3/1 p0/1/2 ALU 0/1/2
xor ebx,ebx // 1/1 p0/1/2 ALU 0/1/2
mov esi,[esp+_STRROWS] // 3/1 p0/1/2 ALU 0/1/2
and edi,-64 // 1/1 p0/1/2 ALU 0/1/2
sub edx,[esp+_STRLEFT] // 4/1 p0/1/2 ALU 0/1/2
movd ebp,mm4 // 4/- FPUvector
pshufd xmm0,xmm0,00000000b // 4/- FPUvector
movd ecx,mm6 // 4/- FPUvector
lea edi,[edi+40h] // 1/1 p0/1/2 ALU 0/1/2
mov esi,[esi] // 3/1 p0/1/2 ALU 0/1/2
cmovge edx,ebx // 1/1 p0/1/2 ALU 0/1/2
movaps xmm1,[edi] // 4/- p5 FSTORE
@sourceLEFT: //
mov bl,[esi] // 4/1 p0/1/2 ALU 0/1/2
add esi,02h // 1/1 p0/1/2 ALU 0/1/2
add edx,ebx // 1/1 p0/1/2 ALU 0/1/2
jle @sourceLEFT // 1/1 p0/1/2 ALU 0/1/2
mov bl,[esi-01h] // 4/1 p0/1/2 ALU 0/1/2
jmp @initpixelSSE // 1/1 p0/1/2 ALU 0/1/2
@newpixelSSE: //
movzx edx,word ptr [esi] // 1/1 p0/1/2 ALU 0/1/2
add esi,02h // 1/1 p0/1/2 ALU 0/1/2
movzx ebx,dh // 1/1 p0/1/2 ALU 0/1/2
@initpixelSSE: //
movaps xmm3,xmm0 // 2/1 p3/4 FADD/FMUL
shl ebx,04h // 1/1 p0/1/2 ALU 0/1/2
add dl,01h // 1/1 p0/1/2 ALU 0/1/2
add ebx,[esp+_STRCOLORS] // 4/1 p0/1/2 ALU 0/1/2
mulps xmm3,[ebx] // 7/2 p4 FMUL
@prevHpixelSSE: //
sub dl,01h // 1/1 p0/1/2 ALU 0/1/2
pshufd xmm2,[ecx+00h],10010101b // 4/- FPUvector
jz @newpixelSSE // 1/1 p0/1/2 ALU 0/1/2
movaps xmm4,xmm3 // 2/1 p3/4 FADD/FMUL
mov ebx,[ecx+00h] // 4/1 p0/1/2 ALU 0/1/2
@pixelSSE: //
mulps xmm4,xmm2 // 7/2 p4 FMUL
test ebx,ebx // 1/1 p0/1/2 ALU 0/1/2
@1pixelSSE: //
addps xmm1,xmm4 // 5/2 p3 FADD
jz @nextHpixelSSE // 1/1 p0/1/2 ALU 0/1/2
movaps [edi],xmm1 // 3/- p5 FSTORE
js @stepHelementSSE // 1/1 p0/1/2 ALU 0/1/2
add edi,10h // 1/1 p0/1/2 ALU 0/1/2
movaps xmm4,xmm3 // 2/1 p3/4 FADD/FMUL
sub ebx,01h // 1/1 p0/1/2 ALU 0/1/2
movaps xmm1,[edi] // 4/- p5 FSTORE
jnz @1pixelSSE // 1/1 p0/1/2 ALU 0/1/2
@nextHpixelSSE: //
cmp ebx,[ecx+08h] // 4/1 p0/1/2 ALU 0/1/2
pshufd xmm2,xmm2,11111111b // 4/- FPUvector
lea ebx,[ebx-01h] // 1/1 p0/1/2 ALU 0/1/2
jnz @pixelSSE // 1/1 p0/1/2 ALU 0/1/2
@stepHelementSSE: //
add ebp,ebx // 1/1 p0/1/2 ALU 0/1/2
lea ecx,[ecx+10h] // 1/1 p0/1/2 ALU 0/1/2
jnz @prevHpixelSSE // 1/1 p0/1/2 ALU 0/1/2
mov edi,[esp] // 4/1 p0/1/2 ALU 0/1/2
xor edx,edx // 1/1 p0/1/2 ALU 0/1/2
@moreVrowsSSE: //
add [eax+00h],ebx // 4/1 p0/1/2 ALU 0/1/2
jns @cvtROW // 1/1 p0/1/2 ALU 0/1/2
cmp ebx,[eax+00h] // 4/1 p0/1/2 ALU 0/1/2
jnz @stepVelementSSE // 1/1 p0/1/2 ALU 0/1/2
add ebp,[eax+08h] // 4/1 p0/1/2 ALU 0/1/2
movd xmm0,ebp // 9/- FPUvector
jnz @zoomvertSSE // 1/1 p0/1/2 ALU 0/1/2
@stepVelementSSE: //
add dword ptr [esp+_STRROWS],04h // 4/1 p0/1/2 ALU 0/1/2
add [esp+_VSIZE],ebx // 4/1 p0/1/2 ALU 0/1/2
lea eax,[eax+10h] // 1/1 p0/1/2 ALU 0/1/2
jnz @copyarraySSE // 1/1 p0/1/2 ALU 0/1/2
sub eax,10h // 1/1 p0/1/2 ALU 0/1/2
mov [eax+00h],ebx // 3/1 p0/1/2 ALU 0/1/2
@cvtROW: //
mov esi,edi // 1/1 p0/1/2 ALU 0/1/2
mov ebp,[esp+_INCREASE] // 4/1 p0/1/2 ALU 0/1/2
and esi,-64 // 1/1 p0/1/2 ALU 0/1/2
sub edi,ebp // 1/1 p0/1/2 ALU 0/1/2
@cvtRGB: //
add esi,40h // 1/1 p0/1/2 ALU 0/1/2
cvtps2dq xmm1,[esi+00h] // 7/2 p5 FSTORE
cvtps2dq xmm2,[esi+10h] // 7/2 p5 FSTORE
cvtps2dq xmm3,[esi+20h] // 7/2 p5 FSTORE
cvtps2dq xmm4,[esi+30h] // 7/2 p5 FSTORE
movaps [esi+00h],xmm5 // 3/- p5 FSTORE
packssdw xmm1,xmm2 // 2/- p3/4 FADD/FMUL
movaps [esi+10h],xmm5 // 3/- p5 FSTORE
packssdw xmm3,xmm4 // 2/- p3/4 FADD/FMUL
movaps [esi+20h],xmm5 // 3/- p5 FSTORE
packuswb xmm1,xmm3 // 2/- p3/4 FADD/FMUL
movaps [esi+30h],xmm5 // 3/- p5 FSTORE
movups [edi+ebp],xmm1 //
add ebp,10h // 1/1 p0/1/2 ALU 0/1/2
js @cvtRGB // 1/1 p0/1/2 ALU 0/1/2
cmp [eax+00h],edx // 4/1 p0/1/2 ALU 0/1/2
jz @moreVrowsSSE // 1/1 p0/1/2 ALU 0/1/2
divss xmm0,xmm0 //16/- p4 FMUL
jns @zoomvertSSE // 1/1 p0/1/2 ALU 0/1/2

Nem látom Netburst-ön tovább az utat: a 19 clock/forráspixeles globális sebességet PSHUFD-MOVAPS-MULPS-ADDPS kvartett kifeszíti, a többi utasítás futását szinte teljesen elrejti.

Most már kíváncsi vagyok, hogy egy P3-on mit lehet kihozni.

[ Szerkesztve ]

Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

Copyright © 2000-2024 PROHARDVER Informatikai Kft.