de200aac4c
[BENCHMARKS] * NEW: Add a new 'btree' benchmark, that does a lot of object creation and recursive function calls. * NEW: Rename the 'string' benchmark as 'string1', to avoid name clashes in Python. * BUG: Fix the HTML table generation.
173 lines
5.1 KiB
Text
Executable file
173 lines
5.1 KiB
Text
Executable file
#!/usr/bin/env gbs3
|
|
|
|
Private $fCompileTime As Float
|
|
|
|
Private Sub RunScript(sScript As String, sRun As String, bGambasOnly As Boolean) As Float
|
|
|
|
Dim aResult As String[]
|
|
Dim sResult As String
|
|
Dim fTime As Float
|
|
|
|
If Not Exist(Application.Dir &/ sScript) Then Return -1
|
|
|
|
If bGambasOnly Then
|
|
Print "Running benchmark: '"; sRun; " "; sScript; "'"
|
|
Else
|
|
Print "<!-- Running benchmark: '"; sRun; " "; sScript; "' -->"
|
|
Endif
|
|
|
|
Shell "/usr/bin/time -v " & sRun & " " & sScript & " 2>&1 >/dev/null" To sResult
|
|
If Not sResult Then Error.Raise("Script '" & sRun & " " & sScript & "' failed!")
|
|
aResult = Split(sResult, "\n")
|
|
For Each sResult In aResult
|
|
sResult = Trim(sResult)
|
|
If sResult Begins "User time" Or If sResult Begins "System time" Then
|
|
fTime += CFloat(Mid$(sResult, InStr(sResult, ":") + 2))
|
|
Endif
|
|
Next
|
|
|
|
$fCompileTime = 0
|
|
Try $fCompileTime = CFloat(Trim(aResult[0]))
|
|
|
|
Return fTime
|
|
|
|
End
|
|
|
|
Private Sub FormatResult(cResult As Collection, iCount As Integer, sLang As String) As String
|
|
|
|
Dim bBetter As Boolean = True
|
|
Dim sFormat As String
|
|
Dim sTest As String
|
|
|
|
If cResult[sLang] <= 0 Then Return Format("30", "0.00") & "+"
|
|
|
|
For Each sTest In ["python", "perl", "java", "gambas"]
|
|
If cResult[sTest] > 0 And If cResult[sTest] < cResult[sLang] Then
|
|
bBetter = False
|
|
Break
|
|
Endif
|
|
Next
|
|
|
|
sFormat = Format(cResult[sLang] / iCount, "0.00")
|
|
If bBetter Then sFormat = "<b>" & sFormat & "</b>"
|
|
Return sFormat
|
|
|
|
End
|
|
|
|
Dim sBenchmark As String
|
|
Dim cResult As Collection
|
|
Dim cAllResult As New Collection
|
|
Dim sLang As String
|
|
Dim sResult As String
|
|
Dim iPos As Integer
|
|
Dim bGambasOnly As Boolean
|
|
Dim sBenchmarkOnly As String
|
|
Dim iCount As Integer = 1
|
|
Dim I As Integer
|
|
Dim fTime As Float
|
|
|
|
Shell "rm -rf " & Shell$(Application.Dir &/ " __pycache__") Wait
|
|
|
|
For I = 1 To Args.Max
|
|
|
|
If Args[I] = "-gambas" Then
|
|
bGambasOnly = True
|
|
Else If Args[I] = "-count" Then
|
|
If I < Args.Max And If Args[I + 1] Not Begins "-" Then
|
|
Try iCount = Max(1, CInt(Args[I + 1]))
|
|
Inc I
|
|
Endif
|
|
Else
|
|
sBenchmarkOnly = Args[I]
|
|
Endif
|
|
|
|
Next
|
|
|
|
For I = 1 To iCount
|
|
|
|
If iCount > 1 Then Print "-------- Run #"; I; " --------"
|
|
|
|
For Each sBenchmark In Dir(Application.Dir, "*.gbs").Sort()
|
|
|
|
sBenchmark = File.BaseName(sBenchmark)
|
|
If sBenchmark = "benchmark" Then Continue
|
|
If sBenchmarkOnly And If sBenchmark <> sBenchmarkOnly Then Continue
|
|
|
|
cResult = cAllResult[sBenchmark]
|
|
If Not cResult Then
|
|
cResult = New Collection
|
|
cResult.Default = 0.0
|
|
cResult!name = sBenchmark
|
|
cAllResult[sBenchmark] = cResult
|
|
Endif
|
|
|
|
If Not bGambasOnly Then
|
|
If sBenchmark <> "string2" Then
|
|
cResult!python += RunScript(sBenchmark & ".py", "python", bGambasOnly)
|
|
Endif
|
|
cResult!perl += RunScript(sBenchmark & ".pl", "perl", bGambasOnly)
|
|
If sBenchmark Not Begins "string" Then
|
|
cResult!java += RunScript(sBenchmark & ".jvs", "java -Xint --source 11", bGambasOnly)
|
|
Endif
|
|
cResult!javajit += RunScript(sBenchmark & ".jvs", "java --source 11", bGambasOnly)
|
|
Endif
|
|
|
|
fTime = RunScript(sBenchmark & ".gbs", "gbs3 -f -U -c", bGambasOnly)
|
|
cResult!gambasjit += fTime
|
|
cResult!gambasjitwct += fTime - $fCompileTime
|
|
cResult!gambas += RunScript(sBenchmark & ".gbs", "gbs3 -c", bGambasOnly)
|
|
|
|
Next
|
|
|
|
Next
|
|
|
|
Print
|
|
|
|
' Print "<div style=\"border:solid 1px gray;padding:8px;display:inline-table;background:\">"
|
|
'
|
|
' Exec ["uname", "-srv"] To sResult
|
|
' Print "<b>Kernel:</b> ";Html(sResult);"<br>"
|
|
'
|
|
' Exec ["cat", "/proc/cpuinfo"] To sResult
|
|
' For Each sResult In Split(sResult, "\n")
|
|
' If sResult Begins "model name" Then
|
|
' iPos = Instr(sResult, ":")
|
|
' If iPos Then
|
|
' Print "<b>CPU:</b> ";Html(Mid$(sResult, iPos+1));"<br>"
|
|
' Endif
|
|
' Break
|
|
' Endif
|
|
' Next
|
|
'
|
|
' Print "</div>"
|
|
|
|
If bGambasOnly Then
|
|
|
|
For Each cResult In cAllResult
|
|
Print cResult!name; Space$(20 - Len(cResult!name)); ": "; Format(cResult!gambas / iCount, "0.00"); " / "; Format(cResult!gambasjit / iCount, "0.00"); " (jit)"; " / "; Format(cResult!gambasjitwct / iCount, "0.00"); " (jit without compilation time)"
|
|
Next
|
|
|
|
Else
|
|
|
|
Print "<table class=\"table\">"
|
|
Print "<tr>\n<th>Benchmark</th>"
|
|
For Each sLang In ["Python", "Perl", "Java", "Gambas", "Java JIT", "Gambas JIT", "Gambas JIT without compilation time"]
|
|
Print "<th style=\"width:12em;\">"; Html(sLang); "</th>"
|
|
Next
|
|
Print "</tr>"
|
|
For Each cResult In cAllResult
|
|
Print "<tr>"
|
|
Print "<td><tt>"; cResult!name; "</tt></td>"
|
|
Print "<td align=\"right\">"; FormatResult(cResult, iCount, "python"); " </td>"
|
|
Print "<td align=\"right\">"; FormatResult(cResult, iCount, "perl"); " </td>"
|
|
Print "<td align=\"right\">"; FormatResult(cResult, iCount, "java"); " </td>"
|
|
Print "<td align=\"right\">"; FormatResult(cResult, iCount, "gambas"); " </td>"
|
|
Print "<td align=\"right\">"; Format(cResult!javajit / iCount, "0.00"); " </td>"
|
|
Print "<td align=\"right\">"; Format(cResult!gambasjit / iCount, "0.00"); " </td>"
|
|
Print "<td align=\"right\">"; Format(cResult!gambasjitwct / iCount, "0.00"); " </td>"
|
|
Print "</tr>"
|
|
Next
|
|
Print "</table>"
|
|
|
|
Endif
|
|
|