Keresés

Aktív témák

  • P.H.

    senior tag

    válasz P.H. #80 üzenetére

    Egy év eltelt, kissé változott a kódolás, de még fontosabb, hogy elkészült a hozzá tartozó egy szálas kiszolgáló kód - amely előkészíti a kiszámolandó mátrixokat - végleges(?) 32 bites változata. Ennek teljes kidolgozása +8-9% sebességnövekedést okozott K10-en.

    jmp @@NEXTMATRIX
    @terminate:
    { x1 } nop
    jmp @@READY
    @@NEXTMATRIX:
    {align $34} nop; mov eax,[APPLICATION]; call TAPPLICATION.PROCESSMESSAGES
    {align $40} mov [ebx+TTSP30.COLLECTOR],edi
    or ecx,-1
    mov eax,[ebx+TTSP30.MEMORY]
    test cl,[ebx+TTSP30.CIRCLESTOP]
    jnz @terminate
    add [ebx+TTSP30.GLOBALSIZE],eax
    {align $50} mov [ebx+TTSP30.MEMORY],ecx
    mov edx,esi
    mov ebp,[esi+TCIRCLE.NEXT]
    cmovc edx,ebp
    mov eax,[edi+TCIRCLE.NEXT]
    cmovc ebp,eax
    {align $5F} mov [ebx+TTSP30.ENTRY],edx
    {align $62} cmovc eax,esi
    mov [esi+TCIRCLE.NEXT],ebp
    mov [edi+TCIRCLE.NEXT],eax
    lea esi,[ebx+TTSP30.RESULTS]
    cmp edx,ebp
    jz @terminate
    {align $70} mov ebx,[edx+TCIRCLE.QUANTITY]
    add dword ptr [edx+TCIRCLE.QUANTITY],02h
    mov ebp,[esp+_ROWSIZE4]
    mov edi,[esp+_CMTX]
    shr ebx,03h
    @createBASE:
    {align $81} mov eax,[edx+ebx*08h+04h]
    mov [esp+_BASEELEMENT+ebx*08h+04h],eax
    mov eax,[edx+ebx*08h+00h]
    mov [esp+_BASEELEMENT+ebx*08h+00h],eax
    {align $90} dec ebx
    jnz @createBASE
    {align $93} add edx,offset(TCIRCLE.SUGGESTED)
    movzx eax,al
    mov [esp+_BASEELEMENT+TCIRCLE.NEXT],edx
    cmp [edx+eax],bl
    {align $A0} jl @matrix0
    mov [esp+_CDEST],ebx
    @INVALIDmatrix:
    {align $A6} mov dword ptr [esi+TRESULT.OPTIMUM],0FFFFFFFFh
    inc ebx
    mov ecx,eax
    @create_matrixes:
    {align $B0} movzx eax,byte ptr [esp+_BASEELEMENT+TCIRCLE.SHORTEST+ebx+00h]
    cmp al,byte ptr [edx-TCIRCLE.SUGGESTED+TCIRCLE.SHORTEST+00h]
    jz @@CHECKRESULTS
    mov [edx+ecx],al
    add esi,TRESULTSIZE
    {align $C0} cmp byte ptr [edx+eax],0FFh
    jnz @INVALIDmatrix
    @matrix0:
    movzx ebx,byte ptr [esp+_BASEELEMENT+TCIRCLE.SHORTEST+ebx+01h]
    mov ecx,[esp+_SIZE2BYTE]
    imul eax,ebp
    shl ebx,02h
    mov [esp+_CDEST],esi
    sub ebx,eax
    mov eax,[esp+_SAVEMTX]
    mov [esi+TRESULT.NXTILTED],ebx
    @copyMTX:
    {align $E2} mov esi,[eax+ecx+04h]
    mov [edi+ecx+04h],esi
    mov esi,[eax+ecx]
    mov [edi+ecx],esi
    {align $F0} sub ecx,08h
    jns @copyMTX
    {align $F5} lea ecx,[esp+_BASEELEMENT+TCIRCLE.TILTEDS]
    mov eax,[esp+_COUNT386]
    @tilt:
    {align $00} mov [edi+ebx],ebp
    movzx ebx,word ptr [ecx]
    add ecx,02h
    test ebx,ebx
    jnz @tilt
    jmp eax
    { x1 } nop
    @VALIDmatrix:
    {align $10} mov ebx,[esi+TRESULTSIZE+TRESULT.IVALUE]
    mov [esi+TRESULT.OPTIMUM],edx
    mov [esi+TRESULT.CCIRCLE],ecx
    mov edx,[esp+_BASEELEMENT+TCIRCLE.NEXT]
    {align $20} movzx ecx,byte ptr [esp+_BASEELEMENT+TCIRCLE.SHORTEST+ebx-01h]
    jmp @create_matrixes
    { x2 } nop; nop
    @@CHECKRESULTS:
    {align $29} add [CIRCLEVAR],ebx
    mov ebx,offset(TSP30)
    mov ebp,offset(TSP30.RESULTS)
    mov edi,[ebx+TTSP30.COLLECTOR]
    @@AFTERCIRCLE:
    mov eax,[esp+_BASEELEMENT+TCIRCLE.QUANTITY]
    { x1 } nop
    @@HEADMATRIX:
    {align $40} mov esi,[ebx+TTSP30.ENTRY]
    @next:
    cmp ebp,[esp+_CDEST]
    ja @@NEXTMATRIX
    mov ecx,[ebp+TRESULT.OPTIMUM]
    {align $50} add ebp,TRESULTSIZE
    { x1 } nop
    cmp ecx,[ebx+TTSP30.GLOBALOPTIMUM]
    jae @next
    mov edx,[ebp-TRESULTSIZE+TRESULT.CCIRCLE]
    cmp edx,[esp+_MTXSIZE]
    {align @60} jz @@CIRCLE0
    { x1 } nop
    cmp dword ptr [edi+TCIRCLE.NEXT],00h
    jz @@PLUSMEM
    @enqueue:
    add dword ptr [ebx+TTSP30.MEMORY],01h
    {align $70} cmovnz esi,[edi+TCIRCLE.NEXT]
    { x1 } nop
    cmovnz edi,esi
    mov [esi+TCIRCLE.RESULT],ecx
    movzx ecx,dl
    shr edx,08h
    {align $80} lea ebx,[esi+TCIRCLE.SHORTEST+ecx]
    neg ecx
    mov [ebx],dl
    @shortest:
    mov [ebx+ecx],dl
    movzx edx,byte ptr [ebp-TRESULTSIZE+TRESULT.ORDERSET+edx]
    {align $90} add ecx,01h
    jnz @shortest
    movzx edx,byte ptr [esp+_BASEELEMENT+TCIRCLE.SHORTEST+00h]
    lea ebx,[eax-TCIRCLE.QUANTITY]
    shr ebx,03h
    @clone:
    {align $A0} mov eax,[esp+_BASEELEMENT+ebx*08h+04h+TCIRCLE.QUANTITY]
    mov [esi+ebx*08h+04h+TCIRCLE.QUANTITY],eax
    mov eax,[esp+_BASEELEMENT+ebx*08h+00h+TCIRCLE.QUANTITY]
    mov [esi+ebx*08h+00h+TCIRCLE.QUANTITY],eax
    {align $B0} dec ebx
    jns @clone
    mov ebx,[ebp-TRESULTSIZE+TRESULT.NXTILTED]
    mov [esi+eax-02h],ebx
    lea ebx,[TSP30]
    @suggest:
    {align $C0} cmp ecx,[ebp-TRESULTSIZE+TRESULT.IVALUE]
    jae @@HEADMATRIX
    movzx ebx,byte ptr [esp+_BASEELEMENT+TCIRCLE.SHORTEST+ecx+01h]
    add ecx,01h
    mov byte ptr [esi+TCIRCLE.SUGGESTED+edx],bl
    mov edx,ebx
    mov ebx,offset(TSP30)
    jmp @suggest
    {align $DE} { x3 } nop; nop; nop
    { x8 } nop; nop; nop; nop; nop; nop; nop; nop
    @@PLUSMEM:
    {align $E9} lea eax,[ebx+TTSP30.WORKAREAS]; xor edx,edx; call _ADDINT
    mov edx,[ebx+TTSP30.STRUCTURESIZE]; mov ecx,3000; call _REALLO
    {align $00} add [ebx+TTSP30.COLLECTED],ecx
    dec ecx
    @setmem:
    {align $04} mov [eax+edx+TCIRCLE.NEXT],eax
    add eax,edx
    sub ecx,01h
    jnz @setmem
    {align $0E} mov edx,[ebp-TRESULTSIZE+TRESULT.CCIRCLE]
    mov ecx,[ebp-TRESULTSIZE+TRESULT.OPTIMUM]
    mov [edi+TCIRCLE.NEXT],eax
    mov eax,[esp+_BASEELEMENT+TCIRCLE.QUANTITY]
    jmp @enqueue
    { x1 } nop
    @@CIRCLE0:
    ...

Aktív témák