Ich schrieb zwei Benchmarks für die L1VM und für C. In beiden wird in einer Schleife Berechnungen ausgeführt. Einmal mit Integer Ganzzahlen und einmal mit Fließkommazahlen.

Die VM verwendet bei beidem den JIT-Compiler zur Codegenerierung.

Alle Benchmarks liefen auf meinem Lenovo Z50-70.

Hier sind die Ergebnisse: C Integer:

$time ./int-test >/dev/null 2>&1

real	0m7,659s
user	0m7,568s
sys	0m0,088s

L1VM Integer:

$time vm/l1vm prog/jit-test >/dev/null 2>&1

real	0m14,394s
user	0m14,238s
sys	0m0,156s

Wie man sehen kann liegt der Faktor für die VM bei etwa 2.

Wie sieht es bei den Fließkommazahlen aus?

C Fließkomma:

$time ./double-test >/dev/null 2>&1

real	1m3,400s
user	1m3,249s
sys	0m0,148s

L1VM Fließkomma:

$time vm/l1vm prog/jit-test-double >/dev/null 2>&1

real	1m11,828s
user	1m11,704s
sys	0m0,120s

Wie man sieht liegt hier der Faktor für die VM bei 1,13! Was ich für den besten Fall halte, den man erreichen kann.

Update: 1.3.2019: Ich erstellte mit “perf” Statistiken:

C Fließkomma:

$perf stat ./double-test >/dev/null

 Performance counter stats for './double-test':

         63.356,60 msec task-clock                #    1,000 CPUs utilized          
               154      context-switches          #    2,431 M/sec                  
                 1      cpu-migrations            #    0,016 M/sec                  
                60      page-faults               #    0,947 M/sec                  
   169.653.354.771      cycles                    # 2677778,818 GHz                 
   327.538.618.264      instructions              #    1,93  insn per cycle         
    66.774.169.451      branches                  # 1053951787,534 M/sec            
       217.507.372      branch-misses             #    0,33% of all branches        

      63,359850369 seconds time elapsed

      63,265225000 seconds user
       0,091995000 seconds sys

L1VM Fließkomma:

$perf stat vm/l1vm prog/jit-test-double >/dev/null

 Performance counter stats for 'vm/l1vm prog/jit-test-double':

         71.950,66 msec task-clock                #    1,000 CPUs utilized          
                32      context-switches          #    0,445 M/sec                  
                 0      cpu-migrations            #    0,000 K/sec                  
               559      page-faults               #    7,769 M/sec                  
   192.391.625.303      cycles                    # 2673962,826 GHz                 
   350.544.144.381      instructions              #    1,82  insn per cycle         
    69.025.626.311      branches                  # 959355473,398 M/sec             
       216.618.770      branch-misses             #    0,31% of all branches        

      71,952339636 seconds time elapsed

      71,835179000 seconds user
       0,115998000 seconds sys

Die Benchmark Sourcen sind hier: Benchmarks-01