Indirekte Kosten eines Funktionsaufrufs

Indirekte Kosten eines Funktionsaufrufs: Vor kurzem möchte ich die Unit-Test-Methode auf mein R-Programm anwenden. Als erstes muss ich alle paar Codezeilen in Funktionen schneiden, um jede einzelne zu testen.

Eine Frage kommt in den Sinn: Was sind die allgemeinen Kosten eines Funktionsaufrufs? Um diese Frage zu beantworten, habe ich Folgendes geschrieben:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
library(rbenchmark)
library(compiler)
f<-function(x,y){
x+y
}
g<-function(x,y){
f(x,y)
}
cmpf<-cmpfun(f)
cmpg<-cmpfun(g)
benchmark(1+2,f(1,2),g(1,2),cmpf(1,2),cmpg(1,2),cmpg2(1,2), replications =1000000, columns = c("test", "replications", "elapsed", "relative"),order='relative')
test replications elapsed relative
1 1 + 2 1000000 4.00 1.000
4 cmpf(1, 2) 1000000 4.34 1.085
2 f(1, 2) 1000000 4.82 1.205
5 cmpg(1, 2) 1000000 5.44 1.360
3 g(1, 2) 1000000 5.68 1.420

Das Ergebnis legt mehrere Dinge nahe.

  1. Die Gesamtkosten für einen 1.000.000-fachen Funktionsaufruf betragen ca. 0,82 Sekunden.
  2. Wenn wir die Funktion kompilieren, betragen die indirekten Kosten ungefähr 0,34 Sekunden pro 1.000.000 Funktionsaufrufe.

Ich weiß nicht, ob es enorme Kosten verursacht, aber ich denke, der Vorteil des Schreibens von sauberem Code mit Unit-Tests sollte mehr wert sein!

 

TszKin Julian Chan

Leave a Reply