OK, ich kenne die Antwort, aber wenn ich mich von dieser Frage inspirieren lasse, würde ich gerne ein paar nette Meinungen dazu bekommen folgend: Warum die Rcpp Übung unten ist 15% schneller (für lange Vektoren) als die eingebaute exp()
? Wir alle wissen, dass Rcpp ein Wrapper für die R / C-API ist, so dass wir eine etwas schlechtere Performance erwarten sollten.
Base R tendiert dazu, mehr nach NA
zu suchen, damit wir etwas gewinnen können, wenn wir das nicht tun. Beachten Sie auch, dass wir mit Tricks wie Loop Unrolling (wie in Rcpp Sugar) noch etwas besser machen können.
Also habe ich
hinzugefügt %Vor%und damit bekomme ich einen weiteren Gewinn - mit weniger Code auf der Benutzerseite:
%Vor% Wenn Sie wirklich Leistungsverbesserungen erzielen möchten, muss Code geschrieben werden, um die zugrunde liegende Hardware-Parallelität zu nutzen. Sie können dies mit dem Paket RcppParallel
tun und sein parallelFor
wäre dafür ein ideales Gefäß.
Sie können auch eine modernere Implementierung von R/C++
ausprobieren. Die nächste Version von Rcpp11
, die in ein paar Tagen veröffentlicht wird, wird automatisch mit einem Thread mit Zucker ausgeliefert, was die expSugar
von der vorherigen Antwort besser macht.
Überlegen Sie:
%Vor% Mit Rcpp
bekomme ich:
Eine nette, aber etwas anekdotische Verbesserung, die sich durch verschiedene Inlining, etc ... erklären lässt, wie in anderen Antworten und Kommentaren beschrieben.
Mit Rcpp11
und automatischem Zucker mit Zucker, bekomme ich: