[PYTHON] Einfaches Benchmark-Skript

Es wurde gemunkelt, dass Ruby langsam war, also habe ich ein Skript zum Benchmarking erstellt und experimentiert.

Dies ist ein (beabsichtigtes) Skript, das 1000 Zeilen Pseudozufallszahlen ausgibt.

Ruby -v 1.9

require 'benchmark'

result = Benchmark.realtime do
  (1..1000).each do |x|
  randam = Random.new
    randam.rand(1000)
    x += 1
  end
end
puts "END: #{result}s"

Ergebnis

END: 0.016832s

Nachtrag vom 10.03.2015 Ein Skript, das korrigiert, worauf @scivola hingewiesen hat ruby -v ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]

require 'benchmark'

randam = Random.new
result = Benchmark.realtime do
  (1..1000).each do |x|
    randam.rand(1000)
  end
end
puts "END: #{result}s"
END: 0.00010036501043941826s

Python 2.7

import random
import timeit

def hoge():
    random.randrange(1000)

t = timeit.timeit(stmt=hoge, number=1000)

print "END: %fs"%(t)

Ergebnis

END: 0.000763s

C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  int i, a;
  clock_t start, end;


  start = clock();
  srand( (unsigned int)time(0));

  for(i = 0 ; i < 1000 ; i++){
   a = rand() % 1000;
  }
  end = clock();
  printf("END: %fs \n", (double)(end - start) / CLOCKS_PER_SEC);
}

Ergebnis

END: 0.000017s

Ich bin der Meinung, dass das Verhältnis oder die Reihenfolge fast den Daten entspricht, die von Google ausgegeben werden. .. .. Ruby hat sauberen Code, daher ist es meiner Meinung nach am besten geeignet, um einfache Webanwendungen zu erstellen und Programmierung zu studieren!

Ja.

Erneut experimentieren

2015/03/15 Nachtrag Es scheint, dass es nicht notwendig war, randam.rand (1000) in den Block zu setzen Der Prozess ist auch erheblich schneller, was dazu führt, dass Python überholt wird. (^^)

Es ist ein Rätsel, dass das Inkrement hinzugefügt wurde (´ω `) ‥ Toho

Jedoch‥

Wenn es sich um einen Benchmark handelt, der nur Zufallszahlen generiert, ist das Sprachverarbeitungssystem nicht so relevant. Ich denke, es wird die Leistung des eingebauten Zufallszahlengenerators messen.

Bestimmt. Ich fühle mich so. Deshalb habe ich einen Test durchgeführt, der auch Ergebnisse liefert. Ruby verwendet Puts, weil es Zeilen gemäß Pythons Druck und Cs Druck bricht.    Ruby2.2.0p0

require 'benchmark'

randam = Random.new
result = Benchmark.realtime do
  (1..1000).each do |x|
    puts randam.rand(1000)
  end
end
puts "END: #{result.to_f}s"
$ ruby bench.rb > rubybench.txt
$ tail rubybench.txt
714
905
522
713
861
615
240
626
126
END: 0.0006876440020278096s
$ wc -l rubybench.txt
    1001 rubybench.txt

python 2.7.6

import random
import timeit

def hoge():
    print random.randrange(1000)

t = timeit.timeit(stmt=hoge, number=1000)

print "END: %fs"%(t)
$ python bench.py > pythonbench.txt
$ tail pythonbench.txt
754
786
919
950
16
294
18
266
62
END: 0.001284s
$ wc -l pythonbench.txt
    1001 pythonbench.txt

c gcc compiler

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  int i, a;
  clock_t start, end;


  start = clock();
  srand( (unsigned int)time(0));

  for(i = 0 ; i < 1000 ; i++){
   a = rand() % 1000;
   printf("%d\n", a);
  }
  end = clock();
  printf("END: %fs \n", (double)(end - start) / CLOCKS_PER_SEC);
}
$ gcc -o hoge.o bench.c
$ ./hoge.o > benchc.txt
$ tail benchc.txt
12
589
344
998
668
221
426
11
508
END: 0.000167s
$ wc -l benchc.txt
    1001 benchc.txt

Da es die Anzahl der Zeilen zählt, habe ich versucht, einen Prozess der Ausgabe in Text durch Umleitung einzufügen. Dies ist das Ergebnis einer nicht standardmäßigen Ausgabe. Ergebnis ist C、Ruby、Python Das Ergebnis ist, dass es in der Größenordnung von schneller ist.

Hintergrundgeschichte

Schreiben Sie das Ergebnis der Standardausgabe in das Terminal, nicht die Ausgabe in Tail oder Text. Ruby END: 0.00417862601170782s END: 0.0041498920036247s END: 0.004223413998261094s

Python END: 0.003860s END: 0.004131s END: 0.002629s

C END: 0.000922s END: 0.000938s END: 0.000984s

C ist immer noch schneller, aber Ruby war schneller beim Umleiten zu Text. Als die Standardausgabe an das Terminal erfolgte, war das Ergebnis ungefähr gleich (obwohl ich mir Sorgen über die Unschärfebreite von Python mache).

Zusammenfassung

Ruby war nicht langsam.

Recommended Posts

Einfaches Benchmark-Skript
Ein einfaches IDAPython-Skript zum Benennen einer Funktion