Added benchmark results
This commit is contained in:
1
.prettierignore
Normal file
1
.prettierignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
benchmark.py
|
||||||
BIN
benchmarks/Benchmarks.xlsx
Normal file
BIN
benchmarks/Benchmarks.xlsx
Normal file
Binary file not shown.
40
benchmarks/README.md
Normal file
40
benchmarks/README.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Benchmarks
|
||||||
|
|
||||||
|
## Konfiguration
|
||||||
|
|
||||||
|
_Angelehnt an Pierre Quentels [Brython Benchmarking 2015](https://brythonista.wordpress.com/2015/03/28/comparing-the-speed-of-cpython-brython-skulpt-and-pypy-js/)_
|
||||||
|
|
||||||
|
- Windows 10 64-bit
|
||||||
|
- Firefox 104.0 64-bit
|
||||||
|
- Neuste Version des jeweiligen Frameworks
|
||||||
|
- 5 Läufe pro Framework
|
||||||
|
- Neustart und Leerung jeglicher Caches nach jedem Lauf
|
||||||
|
- Geometrisches Mittel der 5 Versuche
|
||||||
|
|
||||||
|
## Ergebnisse
|
||||||
|
|
||||||
|
- CPython 3.10.6
|
||||||
|
- [Skulpt 1.3.0 @ Python 2.6(ish)](https://skulpt.org/)
|
||||||
|
- [PyPy.js v0.4.0 @ Python 2.7.9](https://pypyjs.org/)
|
||||||
|
- [Brython 3.10.0 @ Python 3.10.6](https://brython.info/console.html)
|
||||||
|
- [Pyodide 0.21.1 @ Python 3.10.2](https://pyodide.org/en/stable/console.html)
|
||||||
|
- [PyScript 2022.06.1 @ Python 3.10.2](https://pyscript.net/examples/repl.html)
|
||||||
|
|
||||||
|
_Alle Messergebnisse inkl. Berechnung sind in `Benchmarks.xlsx` zu finden._
|
||||||
|
|
||||||
|
```text
|
||||||
|
Ausführungszeit (ms) | x-mal langsamer als CPython
|
||||||
|
CPython Skulpt PyPy.js Brython Pyodide PyScript | Skulpt PyPy.js Brython Pyodide PyScript
|
||||||
|
assignment.py 47 1711 1602 1242 221 194 | 36.4 34.1 26.4 4.7 4.1
|
||||||
|
augm_assign.py 97 2919 1828 2116 378 325 | 30.1 18.8 21.8 3.9 3.4
|
||||||
|
assignment_float.py 44 1707 1505 1306 234 195 | 38.8 34.2 29.7 5.3 4.4
|
||||||
|
build_dict.py 112 2301 2142 2071 466 437 | 20.5 19.1 18.5 4.2 3.9
|
||||||
|
set_dict_item.py 67 1824 2182 1455 347 320 | 27.2 32.6 21.7 5.2 4.8
|
||||||
|
build_list.py 84 1924 1527 1302 440 412 | 22.9 18.2 15.5 5.2 4.9
|
||||||
|
set_list_item.py 73 2264 1455 1432 342 307 | 31.0 19.9 19.6 4.7 4.2
|
||||||
|
add_integers.py 106 4232 1743 2298 436 381 | 39.9 16.4 21.7 4.1 3.6
|
||||||
|
add_strings.py 154 3155 1760 3440 627 575 | 20.5 11.4 22.3 4.1 3.7
|
||||||
|
str_of_int.py 23 553 189 131 104 103 | 24.0 8.2 5.7 4.5 4.5
|
||||||
|
create_function.py 114 2862 1521 2047 526 479 | 25.1 13.3 18.0 4.6 4.2
|
||||||
|
function_call.py 117 2363 1387 2090 457 385 | 20.2 11.9 11.9 3.9 3.3
|
||||||
|
```
|
||||||
@@ -1,4 +1,80 @@
|
|||||||
src = """import time\n\nt0 = time.time()\nfor i in range(1000000):\n a = 1\nprint("assignment.py", time.time()-t0)\n\nt0 = time.time()\na = 0\nfor i in range(1000000):\n a += 1\nprint("augm_assign.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n a = 1.0\nprint("assignment_float.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n a = {0:0}\nprint("build_dict.py", time.time()-t0)\n\nt0 = time.time()\na = {0:0}\n\nfor i in range(1000000):\n a[0] = i\n\nassert a[0]==999999\nprint("set_dict_item.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n a = [1, 2, 3]\nprint("build_list.py", time.time()-t0)\n\nt0 = time.time()\na = [0]\n\nfor i in range(1000000):\n a[0] = i\nprint("set_list_item.py", time.time()-t0)\n\nt0 = time.time()\na, b, c = 1, 2, 3\nfor i in range(1000000):\n a + b + c\nprint("add_integers.py", time.time()-t0)\n\nt0 = time.time()\na, b, c = 'a', 'b', 'c'\nfor i in range(1000000):\n a + b + c\nprint("add_strings.py", time.time()-t0)\n\nt0 = time.time()\nfor _i in range(100000):\n str(_i)\nprint("str_of_int.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n def f():\n pass\nprint("create_function.py", time.time()-t0)\n\nt0 = time.time()\ndef f(x):\n return x\nfor i in range(1000000):\n f(i)\nprint("function_call.py", time.time()-t0)\n\n"""
|
src = """import time\n\nt0 = time.time()\nfor i in range(1000000):\n a = 1\nprint("assignment.py", time.time()-t0)\n\nt0 = time.time()\na = 0\nfor i in range(1000000):\n a += 1\nprint("augm_assign.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n a = 1.0\nprint("assignment_float.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n a = {0:0}\nprint("build_dict.py", time.time()-t0)\n\nt0 = time.time()\na = {0:0}\n\nfor i in range(1000000):\n a[0] = i\n\nassert a[0]==999999\nprint("set_dict_item.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n a = [1, 2, 3]\nprint("build_list.py", time.time()-t0)\n\nt0 = time.time()\na = [0]\n\nfor i in range(1000000):\n a[0] = i\nprint("set_list_item.py", time.time()-t0)\n\nt0 = time.time()\na, b, c = 1, 2, 3\nfor i in range(1000000):\n a + b + c\nprint("add_integers.py", time.time()-t0)\n\nt0 = time.time()\na, b, c = 'a', 'b', 'c'\nfor i in range(1000000):\n a + b + c\nprint("add_strings.py", time.time()-t0)\n\nt0 = time.time()\nfor _i in range(100000):\n str(_i)\nprint("str_of_int.py", time.time()-t0)\n\nt0 = time.time()\nfor i in range(1000000):\n def f():\n pass\nprint("create_function.py", time.time()-t0)\n\nt0 = time.time()\ndef f(x):\n return x\nfor i in range(1000000):\n f(i)\nprint("function_call.py", time.time()-t0)\n\n"""
|
||||||
exec(src)
|
exec(src)
|
||||||
|
|
||||||
|
# Expanded for Skulpt
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
for i in range(1000000):
|
||||||
|
a = 1
|
||||||
|
print("assignment.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
a = 0
|
||||||
|
for i in range(1000000):
|
||||||
|
a += 1
|
||||||
|
print("augm_assign.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
for i in range(1000000):
|
||||||
|
a = 1.0
|
||||||
|
print("assignment_float.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
for i in range(1000000):
|
||||||
|
a = {0:0}
|
||||||
|
print("build_dict.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
a = {0:0}
|
||||||
|
|
||||||
|
for i in range(1000000):
|
||||||
|
a[0] = i
|
||||||
|
|
||||||
|
assert a[0]==999999
|
||||||
|
print("set_dict_item.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
for i in range(1000000):
|
||||||
|
a = [1, 2, 3]
|
||||||
|
print("build_list.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
a = [0]
|
||||||
|
|
||||||
|
for i in range(1000000):
|
||||||
|
a[0] = i
|
||||||
|
print("set_list_item.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
a, b, c = 1, 2, 3
|
||||||
|
for i in range(1000000):
|
||||||
|
a + b + c
|
||||||
|
print("add_integers.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
a, b, c = 'a', 'b', 'c'
|
||||||
|
for i in range(1000000):
|
||||||
|
a + b + c
|
||||||
|
print("add_strings.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
for _i in range(100000):
|
||||||
|
str(_i)
|
||||||
|
print("str_of_int.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
for i in range(1000000):
|
||||||
|
def f():
|
||||||
|
pass
|
||||||
|
print("create_function.py", time.time()-t0)
|
||||||
|
|
||||||
|
t0 = time.time()
|
||||||
|
def f(x):
|
||||||
|
return x
|
||||||
|
for i in range(1000000):
|
||||||
|
f(i)
|
||||||
|
print("function_call.py", time.time()-t0)
|
||||||
|
|
||||||
# Source: http://brython.info/speed/bench_str_pypy.txt
|
# Source: http://brython.info/speed/bench_str_pypy.txt
|
||||||
|
|||||||
Reference in New Issue
Block a user