2016-02-28 5 views
3

У меня есть script.jl, который выглядит более или менее, как это:Julia: @time набор функций

... 

function main() 
    a::... = function1() 
    b::... = function2(...) 
    c::... = function3(...) 
    A::... = function4(...) 
    B::... = function5(...) 
    C::... = function6(...) 
end 

main() 

Я не могу @time main(), поскольку функции 1-3 входные функции и, следовательно, их время выполнения зависит от того, как быстро или медленный пользователь. Есть ли способ использовать только функцию 4-6? я не знаю, что-то вроде этого:

... 

function main() 
    a::... = function1() 
    b::... = function2(...) 
    c::... = function3(...) 
    @time(
    A::... = function4(...) 
    B::... = function5(...) 
    C::... = function6(...) 
    ) 
end 

main() 

ответ

3

Один из способов получить истекшее время с функциями tic() и toc():

Пример:

function main() 
    a::... = function1() 
    b::... = function2(...) 
    c::... = function3(...) 
    tic() 
    A::... = function4(...) 
    B::... = function5(...) 
    C::... = function6(...) 
    toc() 
end 
7

Примечание: Я думаю, это просто пример, но синтаксис C::... недействителен синтаксис Julia, лучше, если вы предоставите простые, но функциональные примеры.

Вы можете предварять каждое выражение, что вы заинтересованы в синхронизации с @time макро аннотации, если вы хотите, независимые тайминги:

function main() 
    a = function1() 
    b = function2(...) 
    c = function3(...) 
    @time A = function4(...) 
    @time B = function5(...) 
    @time C = function6(...) 
end 

main() 

или:

function main() 
    a = function1() 
    b = function2(...) 
    c = function3(...) 
    @time begin 
     A = function4(...) 
     B = function5(...) 
     C = function6(...) 
    end 
end 

main() 

Это похоже на @Gomiero ответьте, просто чтобы вовремя несколько функций с макросом @time, вам нужно ввести новый блок и все, что там есть.

проверка также еще незарегистрированной пакета Benchmarks, то есть:

julia> Pkg.add("https://github.com/johnmyleswhite/Benchmarks.jl.git") 

julia> using Benchmarks 

julia> function test() 
      x = 0 
      for i in 1:1000_000_000 
       x += 1 
      end 
      return x 
     end 
test (generic function with 1 method) 

julia> @time test() # JIT warmup! 
    0.003669 seconds (1.71 k allocations: 90.799 KB) 
1000000000 

julia> @time test() 
    0.000002 seconds (5 allocations: 176 bytes) 
1000000000 

julia> @benchmark test() 
================ Benchmark Results ======================== 
    Time per evaluation: 6.03 ns [5.92 ns, 6.13 ns] 
Proportion of time in GC: 0.00% [0.00%, 0.00%] 
     Memory allocated: 0.00 bytes 
    Number of allocations: 0 allocations 
     Number of samples: 6301 
    Number of evaluations: 811601 
     R² of OLS model: 0.951 
Time spent benchmarking: 2.96 s 

Если вы хотите, чтобы время несколько выражений использовать begin агрегатирования.

Смежные вопросы