2017-08-17 1 views
1

Ich bin ein Neuling auf Julia. Führen Sie den folgenden Code:Warum Julia ist sehr langsam für die erste Bewertung?

const size = 100 
@time A = rand(size, size) * rand(size, size) 
@time B = rand(size, size) * rand(size, size) 
@time a = det(A) 
@time b = det(B) 

print(a, "\n", b) 

Dann habe ich so etwas wie dieses:

0.825584 seconds (259.77 k allocations: 13.101 MiB) 
    0.000248 seconds (11 allocations: 234.813 KiB) 
    0.297366 seconds (44.59 k allocations: 2.591 MiB) 
    0.012814 seconds (12 allocations: 79.375 KiB) 
-9.712788203190892e49 
-5.471097050756647e49 

Warum der erste Aufruf von entweder Matrixmultiplikation oder Auswertung von Determinante ist extrem langsam? Wie vermeide ich das?

+1

Das erste Mal kompiliert die Funktion. Wenn Sie das alles in eine größere Funktion bringen, wird es nur einmal kompiliert. Wenn etwas von beträchtlicher Länge ausgeführt wird, ist dies nicht wirklich wichtig, da der erste Anruf nur einer von vielen ist. Für Paketfunktionen können Sie sie vorkompilieren und die vorkompilierten Versionen speichern. –

+0

X-Ref: '@ btime' in [BenchmarkTools.jl] (https://github.com/JuliaCI/BenchmarkTools.jl). – Gnimuc

Antwort

0

Sie können das Ergebnis des Timings mit Variablen im globalen Gültigkeitsbereich nicht vertrauen. Versuchen Sie es in eine Funktion zu setzen und führen Sie es erneut aus. Außerdem wird das erste Mal, wenn Sie die Funktion ausführen, kompiliert, was einige Zeit dauern wird.

Verwandte Themen