R-Schleife wird langsamer und langsamer

8

Ich habe Mühe zu verstehen, warum dieses bisschen Code (aus dem R Benchmark 2.5 ) immer langsamer wird (im Durchschnitt) wenn die Anzahl der Iterationen zunimmt.

%Vor%

Hier ist eine Beispielausgabe , die von einem Lauf zum nächsten leicht variiert.

Wie ich es verstehe, sollte nichts von einer Iteration zur nächsten gespeichert werden, aber das Timing steigt langsam von 1 Sekunde in den ersten Loops auf mehr als 4 Sekunden in den späteren Loops. Hast du eine Idee, was das verursacht und wie ich es beheben könnte?

Das Umschalten der for-Schleife auf ein * apply scheint zu ähnlichen Ergebnissen zu führen.

Ich weiß, dass der Code nicht optimiert ist, aber er stammt aus einem weit verbreiteten Benchmark, und je nachdem, was dieses Verhalten verursacht, könnte dies auf eine schwerwiegende Verzerrung seiner Ergebnisse hindeuten (die standardmäßig nur dreimal iteriert).

>

Ich benutze die R-Version 3.0.1 (x86_64) unter Mac OS 10.8.4 mit 16 GB RAM (viele davon sind kostenlos). Das BLAS ist OpenBLAS.

    
RenéR 23.06.2013, 21:19
quelle

2 Antworten

1

Eine Lösung wäre, das Compiler-Paket zu verwenden, um Ihren Code in Byte-Code zu kompilieren. Dies sollte die ungeraden Timing-Probleme beseitigen, da es in jeder Iteration denselben kompilierten Code aufruft. Es sollte auch Ihren Code schneller machen. Fügen Sie die folgenden zwei Zeilen ein, um den Compiler für Ihren Code zu aktivieren:

%Vor%

Wenn das Kompilieren des Codes das Problem nicht beseitigt, wird der Satz verdächtiger Probleme eingegrenzt.

    
johneric 10.07.2013 17:33
quelle
0

Vielleicht könnten Sie versuchen, den Code innerhalb der for-Schleife zu einer Funktion zu machen. Auf diese Weise gibt es wirklich keine Möglichkeit, dass ein Lauf einen anderen beeinflusst. Es beseitigt auch die Unordnung, die durch exzessive Nutzung von rm () und gc () verursacht wird.

%Vor%     
Will Beason 10.07.2013 14:45
quelle

Tags und Links