Speed tests are complex in a multitasking operating system.
Compiler optimizations, order of tests, antivirus sniffing affect outcomes.
These results are similar to what v6 revealed with the C backend + optimizer. ASM is 2nd place.
Can't wait to see the optimizer speeds when volatile is fixed!
---------------------------
Macro vs Procedure :: CBE+opt :: 1e9 runs M-P-M-P
Macro - 1850,1964, Proc - 2429,2209
Macro - 1857,1984, Proc - 2384,2224
---------------------------
Macro vs Procedure :: ASM :: 1e9 runs M-P-M-P
Macro - 2451,2412, Proc - 4621,4545
Macro - 2419,2402, Proc - 4552,4539
---------------------------
Macro vs Procedure :: CBE :: 1e9 runs M-P-M-P
Macro - 2582,2432, Proc - 5521,5539
Macro - 2811,2453, Proc - 5599,5506
---------------------------
Code: Select all
Macro IsEqual(x, y, small1=1e-9)
Bool(Abs((x)-(y)) <= small1)
EndMacro
Procedure.d ProcedureTest(x.d,y.d)
ProcedureReturn Bool(Abs((x)-(y)) <= small1)
EndProcedure
ntries.q = 1e9
n.d=1
startm1.q=ElapsedMilliseconds()
For c=1 To ntries
n=IsEqual(c/2,c-100)
Next
stopm1.q=ElapsedMilliseconds()-startm1
n.d=1
startp1.q=ElapsedMilliseconds()
For c=1 To ntries
n=ProcedureTest(c/2,c-100)
Next
stopp1.q=ElapsedMilliseconds()-startp1
n.d=1
startm2.q=ElapsedMilliseconds()
For c=1 To ntries
n=IsEqual(c/2,c-100)
Next
stopm2.q=ElapsedMilliseconds()-startm2
n.d=1
startp2.q=ElapsedMilliseconds()
For c=1 To ntries
n=ProcedureTest(c/2,c-100)
Next
stopp2.q=ElapsedMilliseconds()-startp2
MessageRequester("Macro vs Procedure", "Macro - " + StrD(stopm1) + "," + StrD(stopm2) + ", Proc - " + StrD(stopp1) + "," + StrD(stopp2))