Könntest du ein Beispiel liefern in dem PB schneller ist? Ich hab nicht ganz so viel Ahnung von ASM, und bisher war es bei jedem mit den ASM - Macros schneller bzw. gleich schnell. Würde gerne einen Fall sehen wos anders ist.Rings hat geschrieben:Kappes.
Im Asm-Output (siehe Compilerswitch /Commented )
steht ganz klar ein INC dword[ESP+X]
das heisst es kommt immer grad an wie der cache bestückt ist.
ansonsten ist die reine PB version sogar schneller da
sie mit dem Stack (ESP) arbeitet.
Increment, Decrement
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Schau dir einfach mal den generierten Code an. (pbcompiler test.pb /COMMENTED)
Das kommt da raus:
Das ist bis aufs letzte bit die gleiche Instruktion. Was auch immer du also für Unterschiede feststellst haben nichts mit den Macros zu tun. Das sind alles Effekte des CPU Caches oder des Multitasking-Verhaltens des OS. Probier einfach mal ein bischen mit dem Code rum: Die Ausführungsreihenfolge der Tests spielt eine große Rolle. Sogar die Reihenfolge wie die Prozeduren im Code stehen macht einen Unterschied.
Genau wegen diesen vielen Seiteneffekten macht es keinen Sinn so kurze Codestücke zu testen.
Das kommt da raus:
Code: Alles auswählen
; *Char + 1
INC dword [esp+4]
Code: Alles auswählen
; IncP(char)
p.v_TestString equ esp+0
p.p_char equ esp+4
p.v_i equ esp+8
INC dword[p.p_char]
Genau wegen diesen vielen Seiteneffekten macht es keinen Sinn so kurze Codestücke zu testen.