Re: Assembler IF->THEN
Verfasst: 02.09.2014 20:34
Optminiert wäre zB sowas hier (auf x86_64):
ich hoffe, dass dieser Code hier auf x86_32 Maschinen läuft:
Die Zeiten:
für m = 2147483647 ; maximum für float
ASM Time = 5146ms
PB Time = 15630ms ; etwas das 3fache!
Debugger und allen Schnick-Schnack ausgeschaltet und auf x86_64!
Also mit Optimieren kann man schon viel rausholen. Der Grund, warum dein Code zu langsam war, ist, dass du n, i und j fein in den RAM wider geschrieben hast, aber das brauchst du nicht.
Code: Alles auswählen
t = ElapsedMilliseconds()
! myLoop:
! xor rax, rax
! xor rbx, rbx
! mov ebx, dword [v_m]
! mov rcx, rbx
! .cycle:
! add rax, 0x02
! xor rdx, rdx
! cmp eax, ebx
! jz @f
! inc rdx
! ja @f
! sub rdx, 0x02
! @@:
! loop .cycle
MessageRequester("ASM Time",Str(ElapsedMilliseconds()-t), #PB_MessageRequester_Ok)
Code: Alles auswählen
t = ElapsedMilliseconds()
! myLoop:
! xor eax, eax
! mov ebx, dword [v_m]
! mov ecx, ebx
! .cycle:
! add eax, 0x02
! xor edx, edx
! cmp eax, ebx
! jz @f
! inc edx
! ja @f
! sub edx, 0x02
! @@:
! loop .cycle
MessageRequester("ASM Time",Str(ElapsedMilliseconds()-t), #PB_MessageRequester_Ok)
für m = 2147483647 ; maximum für float
ASM Time = 5146ms
PB Time = 15630ms ; etwas das 3fache!
Debugger und allen Schnick-Schnack ausgeschaltet und auf x86_64!
Also mit Optimieren kann man schon viel rausholen. Der Grund, warum dein Code zu langsam war, ist, dass du n, i und j fein in den RAM wider geschrieben hast, aber das brauchst du nicht.