朱莉娅:@time是一组函数

朱莉娅:@time是一组函数,time,julia,Time,Julia,我有一个script.jl,看起来或多或少像这样: ... function main() a::... = function1() b::... = function2(...) c::... = function3(...) A::... = function4(...) B::... = function5(...) C::... = function6(...) end main() ... function main()

我有一个
script.jl
,看起来或多或少像这样:

...

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

main()
...

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

main()
我不能
@time main()
,因为函数1-3是输入函数,因此它们的执行时间取决于用户的速度。 是否有一种方法可以实现仅限时间的功能4-6? 我不知道,像这样的:

...

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

main()
...

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

main()

获取经过时间的一种方法是使用函数tic()和toc():

例如:

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


更新:tic和toc函数在Julia版本>=1.0中被弃用,不再工作。您可以使用@SalchiPapa的答案中所述的方法,也可以使用该软件包,该软件包具有许多用于Julia代码性能跟踪的强大功能。

注意:我想这只是一个示例,但语法
C::…
不是有效的Julia语法,最好提供简单但功能强大的示例

如果需要独立计时,可以使用
@time
宏注释在对计时感兴趣的每个表达式前面加上前缀:

函数main()
a=函数1()
b=函数2(…)
c=函数3(…)
@时间A=函数4(…)
@时间B=函数5(…)
@时间C=函数6(…)
结束
main()
或:

函数main()
a=函数1()
b=函数2(…)
c=函数3(…)
@时间开始
A=函数4(…)
B=函数5(…)
C=函数6(…)
结束
结束
main()
这类似于@Gomiero answer,只是为了使用
@time
宏对多个函数计时,需要引入一个新的块并将所有内容填充到其中

同时签出仍然未注册的包
基准测试
,即:

julia>Pkg.add(“https://github.com/johnmyleswhite/Benchmarks.jl.git")
julia>使用基准测试
julia>函数测试()
x=0
因为我在1:1000\u 000\u 000
x+=1
结束
返回x
结束
测试(具有1种方法的通用函数)
朱莉娅>@time test()#准时热身!
0.003669秒(1.71K分配:90.799KB)
1000000000
朱莉娅>@时间测试()
0.000002秒(5次分配:176字节)
1000000000
朱莉娅>@基准测试()
======================基准测试结果========================
每次评估的时间:6.03纳秒[5.92纳秒,6.13纳秒]
GC中的时间比例:0.00%[0.00%,0.00%]
已分配内存:0.00字节
分配数量:0个分配
样本数目:6301
评价次数:811601
OLS模型的R²:0.951
基准测试时间:2.96秒

如果要对多个表达式计时,请使用
begin
block方法。

如何将结果保存到变量(仅运行时结果)?@Royi然后只需执行
x=@time foo()
,或
x=@btime foo()
@btime
也来自
BenchmarkTools
。实际上
@btime
会将函数结果放入变量中。我在上面写过,如果有人希望将运行时设置为变量,那么应该使用
runTime=@appeased foo()
运行时=@belapsed foo()
given
BenchmarkTools.jl
@Royi哦,我明白了,我不明白你的意思,很高兴你找到了方法。