This is most exciting.
Code archives/Miscellaneous/Blitz3D commands benchmark
This code has been declared by its author to be Public Domain code.
Download source code
| Article: Command speed in Blitz3D (rus) |
;Blitz3D commands benchmark by Matt Merkulov ;See results in generated "btable.htm" Type T Field i,f#,s$ End Type Const tq=91, cq=100000, times=10, symq=20 Const dtim#=1000000.0/cq Dim ns#(tq) Dim name$(tq) Dim tms(tq) Dim im(symq) Dim fm#(symq) Dim sm$(symq) Dim typ.T(cq) SeedRnd MilliSecs() For n=1 To tq Read name$(n) Next For n=1 To times*tq Repeat num=Rand(1,tq) Until tms(num)<times tms(num)=tms(num)+1 ns#(num)=ns#(num)+dtim#*benchmark(name$(num)) Next n=1 f=WriteFile("btable.htm") WriteLine f,"<HTML><BODY><TABLE>" m$="<TR>" While n<=tq If x=900 Or n=2 Then x=0 y=y+12 WriteLine f,m$ m$="</TR><TR>" End If v#=ns#(n)/times m$=m$+"<TD>"+name$(n)+": "+v#+" ns</TD>" x=x+300 n=n+1 Wend WriteLine f,m$+"</TR></TABLE></BODY></HTML>" CloseFile f ExecFile "btable.htm" Data "template" Data "A=B","D#=E#","I.T=J.T" Data "A=B+C","D#=E#+F#","I.T=New T" Data "A=B-C","D#=E#-F#","Delete I.T" Data "A=B*C","D#=E#*F#","I.T=Before J.T" Data "A=B/C","D#=E#/F#","I.T=After J.T" Data "A=B^P","D#=E#^F#","I.T=First T" Data "A=Abs(B)","D#=Abs(E#)","I.T=Last T" Data "A=Sgn(B)","D#=Sgn(E#)","Insert I.T Before J.T" Data "A=Floor(E#)","D#=Sin(E#)","Insert I.T After J.T" Data "A=Int(E#)","D#=Cos(E#)","For I.T=Each T" Data "A=Ceil(E#)","D#=Tan(E#)","Delete Each T" Data "A=B And C","D#=ASin(R#)","A=Handle(J.T)" Data "A=B Or C","D#=ACos(R#)","I.T=Object(Handle)" Data "A=B Xor C","D#=ATan(E#)","L$=M$" Data "A=B Mod PP","D#=ATan2(E#,F#)","L$=M$+S$" Data "A=B Shl PP","D#=Sqr(E#)","L$=Left$(M$,SQ)" Data "A=B Sar PP","D#=Log(G#)","L$=Right$(M$,SQ)" Data "A=Asc(S$)","D#=Log10(G#)","L$=Chr$(SYM)" Data "A=Len(M$)","D#=Exp(O#)","L$=Mid$(M$,SPOS,SQ)" Data "A=Instr(M$,S$)","","L$=String$(S$,SYMQ)" Data "A=Rand()","D#=Rnd()","L$=Replace$(M$,S$,' ')" Data "A=INTF(B)","D#=FLOATF#(E#)","L$=STRINGF$(M$)" Data "A=im(spos)","D#=fm#(spos)","L$=sm$(spos)" Data "A=J\i","D#=J\f#","L$=J\s$" Data "PokeByte","PokeFloat","PokeInt" Data "PeekByte","PeekFloat","PeekInt" Data "A=D#","D#=S$","S$=A" Data "D#=A","S$=D#","A=S$" Data "IF B=C","IF E#=F#","IF I.T=J.T" Data "IF B>C","IF E#>F#","IF M$=L$" Function benchmark(name$) If First t=Null Then For n=1 To cq I.T=New T typ(n)=I Next End If B=Rand(-2000000000,2000000000) C=Rand(-2000000000,2000000000) P=Rand(-20,20) PP=Rand(1,20) SYM=Rand(0,255) E#=Rnd(-2000000000,2000000000) F#=Rnd(-2000000000,2000000000) G#=Rnd(2,2000000000) O#=Rnd(-20,20) R#=Rnd(-1,1) I.T=typ(Rand(1,cq)) J.T=typ(Rand(2,cq-1)) If i=Null Or j=Null Then Stop SPOS=Rand(1,SYMQ) s$=Chr$(sym) bnk=CreateBank(symq+4) For n=1 To SYMQ L$=Chr$(Rand(0,255)) If nn=SPOS Then S$=L$ M$=M$+L$ Next If name$="I.T=New T" Then Delete Each T k=1 tim=MilliSecs() Select name$ Case "template":For n=1 To cq:A=B:Next Case "A=B":For n=1 To cq:A=B:A=C:Next Case "D#=E#":For n=1 To cq:A=B:D#=E#:Next Case "A=E#":For n=1 To cq:A=B:A=E#:Next Case "D#=B":For n=1 To cq:A=B:D#=B:Next Case "A=B+C":For n=1 To cq:A=B+C:Next Case "D#=E#+F#":For n=1 To cq:D#=E#+F#:Next Case "A=B-C":For n=1 To cq:A=B-C:Next Case "D#=E#-F#":For n=1 To cq:D#=E#-F#:Next Case "A=B*C":For n=1 To cq:A=B*C:Next Case "D#=E#*F#":For n=1 To cq:D#=E#*F#:Next Case "A=B/C":For n=1 To cq:A=B/C:Next Case "D#=E#/F#":For n=1 To cq:D#=E#/F#:Next Case "A=B^P":For n=1 To cq/10:A=B^P:Next:k=10 Case "D#=E#^F#":For n=1 To cq/10:D#=E#^F#:Next:k=10 Case "A=Floor(E#)":For n=1 To cq:A=Floor(E#):Next Case "A=Int(E#)":For n=1 To cq:A=Int(E#):Next Case "A=Ceil(E#)":For n=1 To cq:A=Ceil(E#):Next Case "A=Abs(B)":For n=1 To cq:A=Abs(B):Next Case "D#=Abs(E#)":For n=1 To cq:D#=Abs(E#):Next Case "A=Sgn(B)":For n=1 To cq:A=Sgn(B):Next Case "D#=Sgn(E#)":For n=1 To cq:D#=Sgn(E#):Next Case "A=B Mod PP":For n=1 To cq:A=B Mod PP:Next Case "A=B And C":For n=1 To cq:A=B And C:Next Case "A=B Or C":For n=1 To cq:A=B Or C:Next Case "A=B Xor C":For n=1 To cq:A=B Xor C:Next Case "A=B Shl PP":For n=1 To cq:A=B Shl PP:Next Case "A=B Sar PP":For n=1 To cq:A=B Sar PP:Next Case "D#=Sin(E#)":For n=1 To cq:D#=Sin(E#):Next Case "D#=Cos(E#)":For n=1 To cq:D#=Cos(E#):Next Case "D#=Tan(E#)":For n=1 To cq:D#=Tan(E#):Next Case "D#=ASin(R#)":For n=1 To cq:D#=ASin(R#):Next Case "D#=ACos(R#)":For n=1 To cq:D#=ACos(R#):Next Case "D#=ATan(E#)":For n=1 To cq:D#=ATan(E#):Next Case "D#=ATan2(E#,F#)":For n=1 To cq:D#=ATan2(E#,F#):Next Case "A=Rand()":For n=1 To cq:A=Rand(0):Next Case "D#=Rnd()":For n=1 To cq:D#=Rnd(0.0):Next Case "A=INTF(B)":For n=1 To cq:A=INTF(B):Next Case "D#=FLOATF#(E#)":For n=1 To cq:D#=FLOATF#(E#):Next Case "I.T=J.T":For n=1 To cq:I.T=J.T:Next Case "I.T=New T":For n=1 To cq:I.T=New T:Next Case "Delete I.T":For n=1 To cq:Delete typ(n):Next Case "I.T=Before J.T":For n=1 To cq:I.T=Before J.T:Next Case "I.T=After J.T":For n=1 To cq:I.T=After J.T:Next Case "I.T=First T":For n=1 To cq:I.T=First T:Next Case "I.T=Last T":For n=1 To cq:I.T=Last T:Next Case "Insert I.T Before J.T":For n=1 To cq:Insert I.T Before J.T:Next Case "Insert I.T After J.T":For n=1 To cq:Insert I.T After J.T:Next Case "For I.T=Each T":For I.T=Each T:Next Case "A=Handle(J.T)":For n=1 To cq:A=Handle(J.T):Next Case "I.T=Object(Handle)":For n=1 To cq:I.T=Object.T(Handle(J.T)):Next Case "Delete Each T":Delete Each T Case "L$=M$":For n=1 To cq/10:L$=M$:Next:k=10 Case "L$=M$+S$":For n=1 To cq/10:L$=M$+S$:Next:k=10 Case "L$=Mid$(M$,SPOS,SQ)":For n=1 To cq/10:L$=Mid$(M$,SPOS,SymQ):Next:k=10 Case "D#=Sqr(E#)":For n=1 To cq:D#=Sqr(G#):Next Case "L$=Left$(M$,SQ)":For n=1 To cq/10:L$=Left$(M$,SymQ):Next:k=10 Case "D#=Log(G#)":For n=1 To cq:D#=Log(G#):Next Case "L$=Right$(M$,SQ)":For n=1 To cq/10:L$=Right$(M$,SymQ):Next:k=10 Case "A=Asc(S$)":For n=1 To cq:A=Asc(S$):Next Case "D#=Log10(G#)":For n=1 To cq:D#=Log10(G#):Next Case "L$=String$(S$,SYMQ)":For n=1 To cq/10:L$=String$(S$,SYMQ):Next:k=10 Case "A=Len(M$)":For n=1 To cq/10:A=Len(M$):Next:k=10 Case "D#=Exp(O#)":For n=1 To cq:D#=Exp(O#):Next Case "L$=Chr$(SYM)":For n=1 To cq/10:L$=Chr$(SYM):Next:k=10 Case "A=Instr(M$,S$)":For n=1 To cq/10:A=Instr(M$,S$):Next:k=10 Case "L$=Replace$(M$,S$,' ')":For n=1 To cq/10:L$=Replace$(M$,S$," "):Next:k=10 Case "L$=STRINGF$(M$)":For n=1 To cq/10:L$=STRINGF$(M$):Next:k=10 Case "PokeByte":For n=1 To cq:PokeByte(bnk,spos,sym):Next Case "PokeInt":For n=1 To cq:PokeInt(bnk,spos,a):Next Case "PokeFloat":For n=1 To cq:PokeFloat(bnk,spos,e#):Next Case "PeekByte":For n=1 To cq:a=PeekByte(bnk,spos):Next Case "PeekInt":For n=1 To cq:a=PeekInt(bnk,spos):Next Case "PeekFloat":For n=1 To cq:d#=PeekFloat(bnk,spos):Next Case "A=im(spos)":For n=1 To cq:a=im(spos):Next Case "D#=fm#(spos)":For n=1 To cq:d#=fm#(spos):Next Case "L$=sm$(spos)":For n=1 To cq:l$=sm$(spos):Next Case "A=J\i":For n=1 To cq:a=J\i:Next Case "D#=J\f#":For n=1 To cq:d#=J\f#:Next Case "L$=J\s$":For n=1 To cq:l$=J\s$:Next Case "A=D#":For n=1 To cq:A=D#:Next Case "D#=S$":For n=1 To cq:D#=S$:Next Case "S$=A":For n=1 To cq/10:S$=A:Next:k=10 Case "D#=A":For n=1 To cq:D#=A:Next:k=10 Case "S$=D#":For n=1 To cq/10:S$=D#:Next Case "A=S$":For n=1 To cq:A=S$:Next Case "IF B=C" For n=1 To cq If B=C Then End If Next Case "IF E#=F#" For n=1 To cq If E#=F# Then End If Next Case "IF I.T=J.T" For n=1 To cq If I.T=J.T Then End If Next Case "IF B>C" For n=1 To cq If B>C Then End If Next Case "IF E#>F#" For n=1 To cq If E#>F# Then End If Next Case "IF M$=L$" For n=1 To cq If M$=L$ Then End If Next End Select tim=MilliSecs()-tim If name$="I.T=New T" Then i.t=First t For n=1 To cq typ(n)=i i=After i Next End If Return tim*k End Function Function INTF(N) Return N End Function Function FLOATF#(N#) Return N# End Function Function STRINGF$(S$) Return S$ End Function |
Comments
Thanks. I plan to make BlitzMax version too in future.
Yikes MID is really slow!!!
Here is results for Celeron 4A 2.2GHz:
ns - nanoseconds = 1/1 000 000 000 sec
template: 1.9 ns
A=B: 2.8 ns
D#=E#: 3.0 ns
I.T=J.T: 10.7 ns
A=B+C: 2.9 ns
D#=E#+F#: 8.1 ns
I.T=New T: 86.5 ns
A=B-C: 2.9 ns
D#=E#-F#: 8.2 ns
Delete I.T: 83.2 ns
A=B*C: 2.9 ns
D#=E#*F#: 8.6 ns
I.T=Before J.T: 16.9 ns
A=B/C: 27.4 ns
D#=E#/F#: 11.8 ns
I.T=After J.T: 14.9 ns
A=B^P: 469.0 ns
D#=E#^F#: 1223.0 ns
I.T=First T: 16.2 ns
A=Abs(B): 6.1 ns
D#=Abs(E#): 9.3 ns
I.T=Last T: 16.1 ns
A=Sgn(B): 7.0 ns
D#=Sgn(E#): 11.3 ns
Insert I.T Before J.T: 13.4 ns
A=Floor(E#): 95.9 ns
D#=Sin(E#): 84.3 ns
Insert I.T After J.T: 13.6 ns
A=Int(E#): 6.7 ns
D#=Cos(E#): 94.5 ns
For I.T=Each T: 77.4 ns
A=Ceil(E#): 96.2 ns
D#=Tan(E#): 100.4 ns
Delete Each T: 74.6 ns
A=B And C: 2.7 ns
D#=ASin(R#): 260.2 ns
A=Handle(J.T): 19.0 ns
A=B Or C: 2.9 ns
D#=ACos(R#): 261.6 ns
I.T=Object(Handle): 45.5 ns
A=B Xor C: 2.4 ns
D#=ATan(E#): 116.0 ns
L$=M$: 184.0 ns
A=B Mod PP: 27.7 ns
D#=ATan2(E#,F#): 92.2 ns
L$=M$+S$: 732.0 ns
A=B Shl PP: 4.6 ns
D#=Sqr(E#): 11.0 ns
L$=Left$(M$,SQ): 256.0 ns
A=B Sar PP: 4.1 ns
D#=Log(G#): 49.8 ns
L$=Right$(M$,SQ): 262.0 ns
A=Asc(S$): 582.1 ns
D#=Log10(G#): 50.2 ns
L$=Chr$(SYM): 538.0 ns
A=Len(M$): 173.0 ns
D#=Exp(O#): 106.0 ns
L$=Mid$(M$,SPOS,SQ): 653.0 ns
A=Instr(M$,S$): 341.0 ns
: 0.0 ns
L$=String$(S$,SYMQ): 1530.0 ns
A=Rand(): 79.8 ns
D#=Rnd(): 45.7 ns
L$=Replace$(M$,S$,' '): 879.0 ns
A=INTF(B): 8.2 ns
D#=FLOATF#(E#): 12.5 ns
L$=STRINGF$(M$): 322.0 ns
A=im(spos): 4.4 ns
D#=fm#(spos): 3.1 ns
L$=sm$(spos): 141.0 ns
A=J\i: 2.6 ns
D#=J\f#: 3.0 ns
L$=J\s$: 140.1 ns
PokeByte: 10.1 ns
PokeFloat: 11.1 ns
PokeInt: 10.6 ns
PeekByte: 9.6 ns
PeekFloat: 11.4 ns
PeekInt: 9.6 ns
A=D#: 7.0 ns
D#=S$: 266.5 ns
S$=A: 669.0 ns
D#=A: 75.0 ns
S$=D#: 292.3 ns
A=S$: 176.5 ns
IF B=C: 2.7 ns
IF E#=F#: 8.1 ns
IF I.T=J.T: 9.7 ns
IF B>C: 3.0 ns
IF E#>F#: 8.0 ns
IF M$=L$: 337.4 ns
ns - nanoseconds = 1/1 000 000 000 sec
template: 1.9 ns
A=B: 2.8 ns
D#=E#: 3.0 ns
I.T=J.T: 10.7 ns
A=B+C: 2.9 ns
D#=E#+F#: 8.1 ns
I.T=New T: 86.5 ns
A=B-C: 2.9 ns
D#=E#-F#: 8.2 ns
Delete I.T: 83.2 ns
A=B*C: 2.9 ns
D#=E#*F#: 8.6 ns
I.T=Before J.T: 16.9 ns
A=B/C: 27.4 ns
D#=E#/F#: 11.8 ns
I.T=After J.T: 14.9 ns
A=B^P: 469.0 ns
D#=E#^F#: 1223.0 ns
I.T=First T: 16.2 ns
A=Abs(B): 6.1 ns
D#=Abs(E#): 9.3 ns
I.T=Last T: 16.1 ns
A=Sgn(B): 7.0 ns
D#=Sgn(E#): 11.3 ns
Insert I.T Before J.T: 13.4 ns
A=Floor(E#): 95.9 ns
D#=Sin(E#): 84.3 ns
Insert I.T After J.T: 13.6 ns
A=Int(E#): 6.7 ns
D#=Cos(E#): 94.5 ns
For I.T=Each T: 77.4 ns
A=Ceil(E#): 96.2 ns
D#=Tan(E#): 100.4 ns
Delete Each T: 74.6 ns
A=B And C: 2.7 ns
D#=ASin(R#): 260.2 ns
A=Handle(J.T): 19.0 ns
A=B Or C: 2.9 ns
D#=ACos(R#): 261.6 ns
I.T=Object(Handle): 45.5 ns
A=B Xor C: 2.4 ns
D#=ATan(E#): 116.0 ns
L$=M$: 184.0 ns
A=B Mod PP: 27.7 ns
D#=ATan2(E#,F#): 92.2 ns
L$=M$+S$: 732.0 ns
A=B Shl PP: 4.6 ns
D#=Sqr(E#): 11.0 ns
L$=Left$(M$,SQ): 256.0 ns
A=B Sar PP: 4.1 ns
D#=Log(G#): 49.8 ns
L$=Right$(M$,SQ): 262.0 ns
A=Asc(S$): 582.1 ns
D#=Log10(G#): 50.2 ns
L$=Chr$(SYM): 538.0 ns
A=Len(M$): 173.0 ns
D#=Exp(O#): 106.0 ns
L$=Mid$(M$,SPOS,SQ): 653.0 ns
A=Instr(M$,S$): 341.0 ns
: 0.0 ns
L$=String$(S$,SYMQ): 1530.0 ns
A=Rand(): 79.8 ns
D#=Rnd(): 45.7 ns
L$=Replace$(M$,S$,' '): 879.0 ns
A=INTF(B): 8.2 ns
D#=FLOATF#(E#): 12.5 ns
L$=STRINGF$(M$): 322.0 ns
A=im(spos): 4.4 ns
D#=fm#(spos): 3.1 ns
L$=sm$(spos): 141.0 ns
A=J\i: 2.6 ns
D#=J\f#: 3.0 ns
L$=J\s$: 140.1 ns
PokeByte: 10.1 ns
PokeFloat: 11.1 ns
PokeInt: 10.6 ns
PeekByte: 9.6 ns
PeekFloat: 11.4 ns
PeekInt: 9.6 ns
A=D#: 7.0 ns
D#=S$: 266.5 ns
S$=A: 669.0 ns
D#=A: 75.0 ns
S$=D#: 292.3 ns
A=S$: 176.5 ns
IF B=C: 2.7 ns
IF E#=F#: 8.1 ns
IF I.T=J.T: 9.7 ns
IF B>C: 3.0 ns
IF E#>F#: 8.0 ns
IF M$=L$: 337.4 ns
Opteron 165 @ 2.8ghz - 2GB DDR433
template: 1.0 ns
A=B: 1.0 ns
D#=E#: 5.0 ns
I.T=J.T: 6.0 ns
A=B+C: 2.0 ns
D#=E#+F#: 7.0 ns
I.T=New T: 44.0 ns
A=B-C: 2.0 ns
D#=E#-F#: 8.0 ns
Delete I.T: 43.0 ns
A=B*C: 3.0 ns
D#=E#*F#: 6.0 ns
I.T=Before J.T: 10.0 ns
A=B/C: 16.0 ns
D#=E#/F#: 8.0 ns
I.T=After J.T: 9.0 ns
A=B^P: 120.0 ns
D#=E#^F#: 250.0 ns
I.T=First T: 12.0 ns
A=Abs(B): 6.0 ns
D#=Abs(E#): 7.0 ns
I.T=Last T: 10.0 ns
A=Sgn(B): 5.0 ns
D#=Sgn(E#): 5.0 ns
Insert I.T Before J.T: 8.0 ns
A=Floor(E#): 54.0 ns
D#=Sin(E#): 40.0 ns
Insert I.T After J.T: 12.0 ns
A=Int(E#): 5.0 ns
D#=Cos(E#): 45.0 ns
For I.T=Each T: 20.0 ns
A=Ceil(E#): 55.0 ns
D#=Tan(E#): 56.0 ns
Delete Each T: 38.0 ns
A=B And C: 3.0 ns
D#=ASin(R#): 142.0 ns
A=Handle(J.T): 13.0 ns
A=B Or C: 6.0 ns
D#=ACos(R#): 147.0 ns
I.T=Object(Handle): 28.0 ns
A=B Xor C: 2.0 ns
D#=ATan(E#): 67.0 ns
L$=M$: 50.0 ns
A=B Mod PP: 18.0 ns
D#=ATan2(E#,F#): 65.0 ns
L$=M$+S$: 270.0 ns
A=B Shl PP: 2.0 ns
D#=Sqr(E#): 8.0 ns
L$=Left$(M$,SQ): 90.0 ns
A=B Sar PP: 6.0 ns
D#=Log(G#): 45.0 ns
L$=Right$(M$,SQ): 100.0 ns
A=Asc(S$): 181.0 ns
D#=Log10(G#): 51.0 ns
L$=Chr$(SYM): 170.0 ns
A=Len(M$): 80.0 ns
D#=Exp(O#): 27.0 ns
L$=Mid$(M$,SPOS,SQ): 220.0 ns
A=Instr(M$,S$): 100.0 ns
: 0.0 ns
L$=String$(S$,SYMQ): 600.0 ns
A=Rand(): 41.0 ns
D#=Rnd(): 30.0 ns
L$=Replace$(M$,S$,' '): 330.0 ns
A=INTF(B): 6.0 ns
D#=FLOATF#(E#): 9.0 ns
L$=STRINGF$(M$): 70.0 ns
A=im(spos): 3.0 ns
D#=fm#(spos): 4.0 ns
L$=sm$(spos): 31.0 ns
A=J\i: 5.0 ns
D#=J\f#: 4.0 ns
L$=J\s$: 30.0 ns
PokeByte: 8.0 ns
PokeFloat: 9.0 ns
PokeInt: 9.0 ns
PeekByte: 8.0 ns
PeekFloat: 9.0 ns
PeekInt: 8.0 ns
A=D#: 4.0 ns
D#=S$: 85.0 ns
S$=A: 240.0 ns
D#=A: 40.0 ns
S$=D#: 109.0 ns
A=S$: 55.0 ns
IF B=C: 2.0 ns
IF E#=F#: 4.0 ns
IF I.T=J.T: 4.0 ns
IF B>C: 2.0 ns
IF E#>F#: 4.0 ns
IF M$=L$: 90.0 ns
template: 1.0 ns
A=B: 1.0 ns
D#=E#: 5.0 ns
I.T=J.T: 6.0 ns
A=B+C: 2.0 ns
D#=E#+F#: 7.0 ns
I.T=New T: 44.0 ns
A=B-C: 2.0 ns
D#=E#-F#: 8.0 ns
Delete I.T: 43.0 ns
A=B*C: 3.0 ns
D#=E#*F#: 6.0 ns
I.T=Before J.T: 10.0 ns
A=B/C: 16.0 ns
D#=E#/F#: 8.0 ns
I.T=After J.T: 9.0 ns
A=B^P: 120.0 ns
D#=E#^F#: 250.0 ns
I.T=First T: 12.0 ns
A=Abs(B): 6.0 ns
D#=Abs(E#): 7.0 ns
I.T=Last T: 10.0 ns
A=Sgn(B): 5.0 ns
D#=Sgn(E#): 5.0 ns
Insert I.T Before J.T: 8.0 ns
A=Floor(E#): 54.0 ns
D#=Sin(E#): 40.0 ns
Insert I.T After J.T: 12.0 ns
A=Int(E#): 5.0 ns
D#=Cos(E#): 45.0 ns
For I.T=Each T: 20.0 ns
A=Ceil(E#): 55.0 ns
D#=Tan(E#): 56.0 ns
Delete Each T: 38.0 ns
A=B And C: 3.0 ns
D#=ASin(R#): 142.0 ns
A=Handle(J.T): 13.0 ns
A=B Or C: 6.0 ns
D#=ACos(R#): 147.0 ns
I.T=Object(Handle): 28.0 ns
A=B Xor C: 2.0 ns
D#=ATan(E#): 67.0 ns
L$=M$: 50.0 ns
A=B Mod PP: 18.0 ns
D#=ATan2(E#,F#): 65.0 ns
L$=M$+S$: 270.0 ns
A=B Shl PP: 2.0 ns
D#=Sqr(E#): 8.0 ns
L$=Left$(M$,SQ): 90.0 ns
A=B Sar PP: 6.0 ns
D#=Log(G#): 45.0 ns
L$=Right$(M$,SQ): 100.0 ns
A=Asc(S$): 181.0 ns
D#=Log10(G#): 51.0 ns
L$=Chr$(SYM): 170.0 ns
A=Len(M$): 80.0 ns
D#=Exp(O#): 27.0 ns
L$=Mid$(M$,SPOS,SQ): 220.0 ns
A=Instr(M$,S$): 100.0 ns
: 0.0 ns
L$=String$(S$,SYMQ): 600.0 ns
A=Rand(): 41.0 ns
D#=Rnd(): 30.0 ns
L$=Replace$(M$,S$,' '): 330.0 ns
A=INTF(B): 6.0 ns
D#=FLOATF#(E#): 9.0 ns
L$=STRINGF$(M$): 70.0 ns
A=im(spos): 3.0 ns
D#=fm#(spos): 4.0 ns
L$=sm$(spos): 31.0 ns
A=J\i: 5.0 ns
D#=J\f#: 4.0 ns
L$=J\s$: 30.0 ns
PokeByte: 8.0 ns
PokeFloat: 9.0 ns
PokeInt: 9.0 ns
PeekByte: 8.0 ns
PeekFloat: 9.0 ns
PeekInt: 8.0 ns
A=D#: 4.0 ns
D#=S$: 85.0 ns
S$=A: 240.0 ns
D#=A: 40.0 ns
S$=D#: 109.0 ns
A=S$: 55.0 ns
IF B=C: 2.0 ns
IF E#=F#: 4.0 ns
IF I.T=J.T: 4.0 ns
IF B>C: 2.0 ns
IF E#>F#: 4.0 ns
IF M$=L$: 90.0 ns
Athlon x2 64 duo - 2.2Ghz - 1GB ram 667
template: 1.0 ns
A=B: 1.0 ns
D#=E#: 3.0 ns
I.T=J.T: 8.0 ns
A=B+C: 2.0 ns
D#=E#+F#: 6.0 ns
I.T=New T: 58.0 ns
A=B-C: 4.0 ns
D#=E#-F#: 11.0 ns
Delete I.T: 58.0 ns
A=B*C: 5.0 ns
D#=E#*F#: 10.0 ns
I.T=Before J.T: 15.0 ns
A=B/C: 21.0 ns
D#=E#/F#: 10.0 ns
I.T=After J.T: 15.0 ns
A=B^P: 140.0 ns
D#=E#^F#: 330.0 ns
I.T=First T: 12.0 ns
A=Abs(B): 5.0 ns
D#=Abs(E#): 8.0 ns
I.T=Last T: 16.0 ns
A=Sgn(B): 3.0 ns
D#=Sgn(E#): 10.0 ns
Insert I.T Before J.T: 10.0 ns
A=Floor(E#): 70.0 ns
D#=Sin(E#): 55.0 ns
Insert I.T After J.T: 14.0 ns
A=Int(E#): 8.0 ns
D#=Cos(E#): 58.0 ns
For I.T=Each T: 26.0 ns
A=Ceil(E#): 71.0 ns
D#=Tan(E#): 72.0 ns
Delete Each T: 54.0 ns
A=B And C: 3.0 ns
D#=ASin(R#): 188.0 ns
A=Handle(J.T): 18.0 ns
A=B Or C: 4.0 ns
D#=ACos(R#): 189.0 ns
I.T=Object(Handle): 39.0 ns
A=B Xor C: 4.0 ns
D#=ATan(E#): 88.0 ns
L$=M$: 60.0 ns
A=B Mod PP: 25.0 ns
D#=ATan2(E#,F#): 91.0 ns
L$=M$+S$: 310.0 ns
A=B Shl PP: 4.0 ns
D#=Sqr(E#): 6.0 ns
L$=Left$(M$,SQ): 120.0 ns
A=B Sar PP: 5.0 ns
D#=Log(G#): 61.0 ns L$=Right$(M$,SQ): 120.0 ns
A=Asc(S$): 225.0 ns
D#=Log10(G#): 62.0 ns
L$=Chr$(SYM): 210.0 ns
A=Len(M$): 60.0 ns
D#=Exp(O#): 34.0 ns
L$=Mid$(M$,SPOS,SQ): 340.0 ns
A=Instr(M$,S$): 140.0 ns : 0.0 ns
L$=String$(S$,SYMQ): 760.0 ns
A=Rand(): 62.0 ns
D#=Rnd(): 39.0 ns
L$=Replace$(M$,S$,' '): 420.0 ns
A=INTF(B): 8.0 ns
D#=FLOATF#(E#): 10.0 ns
L$=STRINGF$(M$): 120.0 ns
A=im(spos): 6.0 ns
D#=fm#(spos): 3.0 ns
L$=sm$(spos): 48.0 ns
A=J\i: 3.0 ns
D#=J\f#: 6.0 ns
L$=J\s$: 46.0 ns
PokeByte: 10.0 ns
PokeFloat: 6.0 ns
PokeInt: 10.0 ns
PeekByte: 8.0 ns
PeekFloat: 11.0 ns
PeekInt: 8.0 ns
A=D#: 6.0 ns
D#=S$: 114.0 ns
S$=A: 300.0 ns
D#=A: 90.0 ns
S$=D#: 131.0 ns
A=S$: 72.0 ns
IF B=C: 3.0 ns
IF E#=F#: 8.0 ns
IF I.T=J.T: 7.0 ns
IF B>C: 3.0 ns
IF E#>F#: 8.0 ns
IF M$=L$: 112.0 ns
template: 1.0 ns
A=B: 1.0 ns
D#=E#: 3.0 ns
I.T=J.T: 8.0 ns
A=B+C: 2.0 ns
D#=E#+F#: 6.0 ns
I.T=New T: 58.0 ns
A=B-C: 4.0 ns
D#=E#-F#: 11.0 ns
Delete I.T: 58.0 ns
A=B*C: 5.0 ns
D#=E#*F#: 10.0 ns
I.T=Before J.T: 15.0 ns
A=B/C: 21.0 ns
D#=E#/F#: 10.0 ns
I.T=After J.T: 15.0 ns
A=B^P: 140.0 ns
D#=E#^F#: 330.0 ns
I.T=First T: 12.0 ns
A=Abs(B): 5.0 ns
D#=Abs(E#): 8.0 ns
I.T=Last T: 16.0 ns
A=Sgn(B): 3.0 ns
D#=Sgn(E#): 10.0 ns
Insert I.T Before J.T: 10.0 ns
A=Floor(E#): 70.0 ns
D#=Sin(E#): 55.0 ns
Insert I.T After J.T: 14.0 ns
A=Int(E#): 8.0 ns
D#=Cos(E#): 58.0 ns
For I.T=Each T: 26.0 ns
A=Ceil(E#): 71.0 ns
D#=Tan(E#): 72.0 ns
Delete Each T: 54.0 ns
A=B And C: 3.0 ns
D#=ASin(R#): 188.0 ns
A=Handle(J.T): 18.0 ns
A=B Or C: 4.0 ns
D#=ACos(R#): 189.0 ns
I.T=Object(Handle): 39.0 ns
A=B Xor C: 4.0 ns
D#=ATan(E#): 88.0 ns
L$=M$: 60.0 ns
A=B Mod PP: 25.0 ns
D#=ATan2(E#,F#): 91.0 ns
L$=M$+S$: 310.0 ns
A=B Shl PP: 4.0 ns
D#=Sqr(E#): 6.0 ns
L$=Left$(M$,SQ): 120.0 ns
A=B Sar PP: 5.0 ns
D#=Log(G#): 61.0 ns L$=Right$(M$,SQ): 120.0 ns
A=Asc(S$): 225.0 ns
D#=Log10(G#): 62.0 ns
L$=Chr$(SYM): 210.0 ns
A=Len(M$): 60.0 ns
D#=Exp(O#): 34.0 ns
L$=Mid$(M$,SPOS,SQ): 340.0 ns
A=Instr(M$,S$): 140.0 ns : 0.0 ns
L$=String$(S$,SYMQ): 760.0 ns
A=Rand(): 62.0 ns
D#=Rnd(): 39.0 ns
L$=Replace$(M$,S$,' '): 420.0 ns
A=INTF(B): 8.0 ns
D#=FLOATF#(E#): 10.0 ns
L$=STRINGF$(M$): 120.0 ns
A=im(spos): 6.0 ns
D#=fm#(spos): 3.0 ns
L$=sm$(spos): 48.0 ns
A=J\i: 3.0 ns
D#=J\f#: 6.0 ns
L$=J\s$: 46.0 ns
PokeByte: 10.0 ns
PokeFloat: 6.0 ns
PokeInt: 10.0 ns
PeekByte: 8.0 ns
PeekFloat: 11.0 ns
PeekInt: 8.0 ns
A=D#: 6.0 ns
D#=S$: 114.0 ns
S$=A: 300.0 ns
D#=A: 90.0 ns
S$=D#: 131.0 ns
A=S$: 72.0 ns
IF B=C: 3.0 ns
IF E#=F#: 8.0 ns
IF I.T=J.T: 7.0 ns
IF B>C: 3.0 ns
IF E#>F#: 8.0 ns
IF M$=L$: 112.0 ns
Interesting:
Ordered slowest>fastest. Some simple stuff like A=B seems *slower* than A=B AND C? :S
Ordered slowest>fastest. Some simple stuff like A=B seems *slower* than A=B AND C? :S
L$=String$(S$,SYMQ): 1530.00 D#=E#^F#: 1223.00 L$=Replace$(M$,S$,' '): 879.00 L$=M$+S$: 732.00 S$=A: 669.00 L$=Mid$(M$,SPOS,SQ): 653.00 A=Asc(S$): 582.10 L$=Chr$(SYM): 538.00 A=B^P: 469.00 A=Instr(M$,S$): 341.00 IF M$=L$: 337.40 L$=STRINGF$(M$): 322.00 S$=D#: 292.30 D#=S$: 266.50 L$=Right$(M$,SQ): 262.00 D#=ACos(R#): 261.60 D#=ASin(R#): 260.20 L$=Left$(M$,SQ): 256.00 L$=M$: 184.00 A=S$: 176.50 A=Len(M$): 173.00 L$=sm$(spos): 141.00 L$=J\s$: 140.10 D#=ATan(E#): 116.00 D#=Exp(O#): 106.00 D#=Tan(E#): 100.40 A=Ceil(E#): 96.20 A=Floor(E#): 95.90 D#=Cos(E#): 94.50 D#=ATan2(E#,F#): 92.20 I.T=New T: 86.50 D#=Sin(E#): 84.30 Delete I.T: 83.20 A=Rand(): 79.80 For I.T=Each T: 77.40 D#=A: 75.00 Delete Each T: 74.60 D#=Log10(G#): 50.20 D#=Log(G#): 49.80 D#=Rnd(): 45.70 I.T=Object(Handle): 45.50 A=B Mod PP: 27.70 A=B/C: 27.40 A=Handle(J.T): 19.00 I.T=Before J.T: 16.90 I.T=First T: 16.20 I.T=Last T: 16.10 I.T=After J.T: 14.90 Insert I.T After J.T: 13.60 Insert I.T Before J.T: 13.40 D#=FLOATF#(E#): 12.50 D#=E#/F#: 11.80 PeekFloat: 11.40 D#=Sgn(E#): 11.30 PokeFloat: 11.10 D#=Sqr(E#): 11.00 I.T=J.T: 10.70 PokeInt: 10.60 PokeByte: 10.10 IF I.T=J.T: 9.70 PeekByte: 9.60 PeekInt: 9.60 D#=Abs(E#): 9.30 D#=E#*F#: 8.60 D#=E#-F#: 8.20 A=INTF(B): 8.20 D#=E#+F#: 8.10 IF E#=F#: 8.10 IF E#>F#: 8.00 A=Sgn(B): 7.00 A=D#: 7.00 A=Int(E#): 6.70 A=Abs(B): 6.10 A=B Shl PP: 4.60 A=im(spos): 4.40 A=B Sar PP: 4.10 D#=fm#(spos): 3.10 D#=E#: 3.00 D#=J\f#: 3.00 IF B>C: 3.00 A=B+C: 2.90 A=B-C: 2.90 A=B*C: 2.90 A=B Or C: 2.90 A=B: 2.80 A=B And C: 2.70 IF B=C: 2.70 A=J\i: 2.60 A=B Xor C: 2.40 template: 1.90
There are some infelcities depending of checks' quantity (precision). Sometimes even template (no operations at all, just plain cycle) is slower than equation. Try to raise checks quantity.
here is P4 2.4GHz, 1 Gig Ram, nVidia 7600GT, 256MB VRAM, WinXP Pro SP2
Matt Merkulov, have you got a BlitzMax version of this test? I tried to convert it but got stuck with the way Types are declared and used in BM, and I have little time to study BM as I'm focusing my energy on my project.