Aktív témák

  • P.H.

    senior tag

    A korábbi pár munkaórás skiccek után egy valódi nagypálya, amelyben már több 10 munkaóra fekszik: a következő kódnak 100 megapixeles képeket kellene kezelnie 1 másodpercen belüli időhatárral; jelenleg 32 megapixeles képen tesztelve bőven megvan az 1 másodperc, de gyorsabbnak érződik 2.26 GHz-es CeleronD-n, mint 2.2 GHz-es Opteron-on. Első lépésben a kép erőteljesen tömörítve lesz, és talán vissza lesz az algoritmus írva integer alapra (MMX/SSE2), a színhelyesség megtartásával.

    A kiindulási kód:

    @decode:
    movd esi,mm5
    movd edx,mm4
    movd ecx,mm7
    movd ebx,mm6
    movss xmm0,[ebp]
    @temprow:
    movzx eax,byte ptr [esi]
    add esi,01h
    shl eax,04h
    sub edx,01h
    movaps xmm3,[ecx+eax]
    movaps [ebx],xmm3
    lea ebx,[ebx+20h]
    jg @temprow
    add esi,[esp+_SROW]
    mov ecx,edi
    movd mm5,esi
    mov edx,[ebp+08h]
    @zoomvertSSE:
    and edi,-32
    movd esi,mm6
    add edi,20h
    shufps xmm0,xmm0,00000000b
    movd eax,mm4
    movaps xmm1,[edi]
    @prevHpixelSSE:
    movaps xmm4,[esi-00h]
    movlps xmm2,[esi-10h]
    mov ebx,[esi-10h+08h]
    mulps xmm4,xmm0
    shufps xmm2,xmm2,01000000b
    movaps xmm3,xmm4
    @pixelSSE:
    test ebx,ebx
    mulps xmm4,xmm2
    @1pixelSSE:
    addps xmm1,xmm4
    jz @nextHpixelSSE
    movaps [edi],xmm1
    js @stepHelementSSE
    add edi,10h
    movaps xmm4,xmm3
    sub ebx,01h
    movaps xmm1,[edi]
    jnz @1pixelSSE
    @nextHpixelSSE: { EBX = 0 }
    shufps xmm2,xmm2,11111111b
    cmp [esi-10h+04h],ebx
    lea ebx,[ebx-01h]
    jnz @pixelSSE
    @stepHelementSSE: { EBX = -1 }
    add eax,ebx
    lea esi,[esi+20h]
    jnz @prevHpixelSSE
    mov edi,ecx
    @moreVrowsSSE: { EAX = 0 és EBX = -1 }
    add edx,ebx
    jns @cvtROW
    cmp edx,ebx
    jnz @stepVelementSSE
    add eax,[ebp+04h]
    movd xmm0,eax
    jnz @zoomvertSSE
    @stepVelementSSE:
    add [esp+_VSIZE],ebx
    lea ebp,[ebp+20h]
    jnz @decode
    mov edx,ebx
    @cvtROW:
    mov esi,ecx
    mov eax,[esp+_INCREASE]
    and esi,-32
    sub edi,eax
    @cvtRGB:
    add esi,20h
    cvtps2dq xmm0,[esi+00h]
    movaps [esi+00h],xmm5
    cvtps2dq xmm1,[esi+10h]
    movaps [esi+10h],xmm5
    packssdw xmm0,xmm1
    packuswb xmm0,xmm1
    movq [edi+eax],xmm0
    add eax,08h
    js @cvtRGB
    test edx,edx
    mov ecx,edi
    jz @moreVrowsSSE
    divss xmm0,xmm0
    jns @zoomvertSSE

    [ Szerkesztve ]

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

Aktív témák