05-09-2022, 01:26 AM
Code: (Select All)
' Speed Test for g++ optimization parameters
' modifies .\internal\c\makeline_win.txt (restores changes on exit)
o$ = "c_compiler\bin\g++ -s -Wfatal-errors -w -Wall qbx.cpp -lws2_32 -lwinspool parts\core\os\win\src.a "
o$ = o$ + "-lopengl32 -lglu32 -lwinmm -lgdi32 -mwindows -static-libgcc -static-libstdc++ -D GLEW_STATIC "
o$ = o$ + "-D FREEGLUT_STATIC -lksguid -lole32 -lwinmm -ldxguid -o ..\..\"
Shell "copy .\internal\c\makeline_win.txt .\internal\c\makeline_win.bak"
Open "sptest_t1.bas" For Output As #1
Do
Read c$
If c$ = "" Then Exit Do
Print #1, c$
Loop
Close #1
Shell _Hide "copy sptest_t1.bas sptest_t2.bas"
Shell _Hide "copy sptest_t1.bas sptest_t3.bas"
Shell _Hide "copy sptest_t1.bas sptest_t4.bas"
m$(1) = "" ' no optimization
m$(2) = "-O2" ' oxygen
m$(3) = "-O3" ' ozone
m$(4) = "-Ofast" ' Lamborghini?
start_at = 2 ' skip NO optimization because it's a turkey
For pass = start_at To 4
c$ = Left$(o$, 22) + m$(pass) + " " + Right$(o$, Len(o$) - 22)
Open ".\internal\c\makeline_win.txt" For Output As #1
Print #1, c$
Close #1
c$ = "qb64 -x sptest_t" + Chr$(48 + pass)
Shell _Hide c$
Shell _Hide "copy .\internal\c\makeline_win.bak .\internal\c\makeline_win.txt" ' restore file
GoSub keycheck ' exit?
Next pass
Do
best# = 99999
For pass = start_at To 4
start# = Timer '
c$ = "sptest_t" + Chr$(48 + pass)
Shell c$ ' run the test
elapse# = Timer - start#
If elapse# < best# Then best# = elapse#: bestpass = pass
Print Using "####.## "; elapse#;: Print m$(pass) ' show the timing
GoSub keycheck '
Next pass
count(bestpass) = count(bestpass) + 1
For pass = start_at To 4
Print Using "#### "; count(pass);
Next pass
Print Using "#### "; count(1) + count(2) + count(3) + count(4);
Print
Loop
keycheck:
If _Exit Or Len(InKey$) Then
Shell _Hide "del .\internal\c\makeline_win.bak"
Shell _Hide "del sptest_t*.*"
System
End If
Return
Data "Dim c(256) as _unsigned long"
Data "xm = 100: ym = 100"
Data "Screen _NewImage(xm, ym, 32)"
Data "_screenmove _desktopwidth-xm,0"
Data "x1 = -2: x2 = .6: y1 = -1.25: y2 = 1.25"
Data "xd = (x2 - x1) / xm: yd = (y2 - y1) / ym"
Data "c(0) = _RGB32(0, 0, 0)"
Data "For i = 1 To 31"
Data "c(i) = _RGB32(rnd*255,rnd*255,rnd*255)"
Data "Next i"
Data "For y = 0 To ym - 1"
Data "mandely = y1 + y * yd"
Data "For x = 0 To xm - 1"
Data "mandelx = x1 + x * xd"
Data "Itera = 5000: real = 0: imag = 0: size = -1"
Data "While (Itera > 0) And (size < 0)"
Data "Itera = Itera - 1"
Data "hold = imag"
Data "imag = (real * imag) * 2 + mandely"
Data "real = real * real - hold * hold + mandelx"
Data "size = (real * real + imag * imag) - 99"
Data "Wend"
Data "PSet (x, y), c(Itera Mod 32)"
Data "Next x"
Data "Next y"
Data "System"
Data ""