updating benchmarks

on the new machine, consistent
not rubyx yet
This commit is contained in:
Torsten 2019-07-23 20:14:28 +03:00
parent 861fa3203f
commit 00bf38a0e6
17 changed files with 47 additions and 56 deletions

View File

@ -17,11 +17,10 @@ int fibo(int n){
int main(void) int main(void)
{ {
int counter = 100352 - 352; int counter = 100000;
int counter2 = counter;
int level = 40;
int fib ; int fib ;
while(counter--) { while(counter) {
fib = fibo(level); fib += fibo(20);
counter -= 1;
} }
} }

View File

@ -10,10 +10,9 @@ int fibo_r(int n)
int main(void) int main(void)
{ {
int counter = 1000; int counter = 100000;
int counter2 = counter;
int fib ; int fib ;
while(counter--) { while(counter--) {
fib = fibo_r(20); fib += fibo_r(10);
} }
} }

View File

@ -2,8 +2,7 @@
int main(void) int main(void)
{ {
setbuf(stdout, NULL); /* to make it equivalent to the typed version, otherwise it caches */ int counter = 100000;
int counter = 100352 - 352;
while(counter--) { while(counter--) {
printf("Hello there\n"); printf("Hello there\n");
} }

View File

@ -3,9 +3,9 @@
int main(void) int main(void)
{ {
char stringa[20] ; char stringa[20] ;
int counter = 1000;
int counter = 100352 - 352;
while(counter--) { while(counter--) {
sprintf(stringa, "%i\n" , counter); sprintf(stringa, "%i\n" , counter);
} }
} }

View File

@ -1,9 +0,0 @@
#include<stdio.h>
int main(void)
{
int counter = 100352 - 352;
while(counter) {
counter = counter - 1;
}
}

5
test/bench/c/noop.c Normal file
View File

@ -0,0 +1,5 @@
int main(void)
{
return 0;
}

View File

@ -20,6 +20,6 @@ func main() {
sum := 1 sum := 1
for sum < 100000 { for sum < 100000 {
sum += 1 sum += 1
fibo( 40 ) fibo( 20 )
} }
} }

View File

@ -10,8 +10,8 @@ func fib(n uint) uint {
func main() { func main() {
sum := 1 sum := 1
for sum < 1000 { for sum < 100000 {
sum += 1 sum += 1
fib( 20 ) fib( 10 )
} }
} }

5
test/bench/go/noop.go Normal file
View File

@ -0,0 +1,5 @@
package main
func main() {
return
}

View File

@ -1,36 +1,28 @@
# Benchmarks # Benchmarks
loop - program does empty loop of same size as hello hello - output hello world to measure kernel calls
hello - output hello world (to dev/null) to measure kernel calls (not terminal speed) add - run integer adds by linear fibonacci of 20
itos - convert integers from 1 to 100000 to string call - exercise calling by recursive fibonacci of 10
add - run integer adds by linear fibonacci of 40 noop - a baseline that does nothing
call - exercise calling by recursive fibonacci of 20
Hello and puti and add run 100_000 iterations per program invocation to remove startup overhead. All programs (apart from noop) run 1M times to minimize startup impact.
Call only has 10000 iterations, as it much slower
Gcc used to compile c on the machine
typed produced by ruby (on another machine)
C was linked statically as dynamic linked influences times. Output was sent to /dev/null, so as
to measure the calling and not the terminal.
# Results # Results
Results were measured by a ruby script. Mean and variance was measured until variance was low, Results were measured by a ruby script. Mean and variance was measured until variance was low,
always under one percent. always under one percent. Noop showed that program startup is a factor, so all programs loop to 1M.
The machine was a virtual arm run on a powerbook, performance roughly equivalent to a raspberry pi. The machine was a virtual arm (qemu) run on a acer swift 5 (i5 8265 3.9GHz), performance roughly equivalent to a raspberry pi.
But results should be seen as relative, not absolute. But results (in ms) should be seen as relative, not absolute.
language | loop | hello | itos | add | call language | noop | hello | add | call
c | 0,0500 | 2,1365 | 0,2902 | 0,1245 | 0,8535 c | 45 | 100 | 72 | 591
go | 0.0485 | 4.5355 | 0.2143 | 0.0825 | 0.8769 go | 53 | 4060 | 64 | 624
typed | 0,0374 | 1,2071 | 0,7263 | 0,2247 | 1,3625 rubyx | 0,0374 | 1,2071 | 0,2247 | 1,3625
ruby | 0,3 | 8.882 | 0,8971 | 3,8452 ruby | 1830 | 2750 | 3000 | 1900_000
2c | - 33 % | - 79 % | + 150% | + 80 % | + 60 %
2r | x 10 | x 6 | + 23% | x 17 | x 26
Comparison with ruby, not really for speed, just to see how much leeway there is for our next layer. Comparison with ruby, not really for speed, just to see how much leeway there is for our next layer.
Ruby startup time is 1,5695 seconds, which we'll subtract from the benches

View File

@ -14,6 +14,6 @@ end
counter = 100000 counter = 100000
while(counter > 0) do while(counter > 0) do
fibo(40) fibo(20)
counter -= 1 counter -= 1
end end

View File

@ -8,9 +8,9 @@ def fibo_r( n )
end end
counter = 1000 counter = 100
while(counter > 0) do while(counter > 0) do
fibo_r(20) fibo_r(10)
counter -= 1 counter -= 1
end end

View File

@ -1,7 +1,6 @@
counter = 100352 - 352; counter = 100000;
while(counter > 0) do while(counter > 0) do
puts "Hello there" puts "Hello there"
STDOUT.flush
counter = counter - 1 counter = counter - 1
end end

1
test/bench/ruby/noop.rb Normal file
View File

@ -0,0 +1 @@
return 0

View File

@ -1,6 +1,6 @@
class Space class Space
def main(arg) def main(arg)
n = 6 n = 10
a = 0 a = 0
b = 1 b = 1
i = 1 i = 1
@ -13,3 +13,4 @@ class Space
return result return result
end end
end end
#Space.new.main(1)

View File

@ -1,5 +1,5 @@
class Space class Space
def main(arg) def main(arg)
return "Hello-there".putstring return "Hello-there\n".putstring
end end
end end

View File

@ -11,6 +11,6 @@ class Space
end end
def main(arg) def main(arg)
return fibo_r(5) return fibo_r(10)
end end
end end