如何在Julia中获取函数的执行时间?

如何在Julia中获取函数的执行时间?,julia,Julia,我想得到Julia中函数的执行时间。以下是一个最低限度的工作示例: function raise_to(n) for i in 1:n y = (1/7)^n end end 如何获得执行提升到(10)所需的时间?可以使用@time宏告诉您计算函数所需的时间。它还提供了如何分配内存 julia> function raise_to(n) for i in 1:n y = (1/7)^n

我想得到Julia中函数的执行时间。以下是一个最低限度的工作示例:

function raise_to(n)
    for i in 1:n
        y = (1/7)^n
    end
end

如何获得执行
提升到(10)
所需的时间?

可以使用
@time
宏告诉您计算函数所需的时间。它还提供了如何分配内存

julia> function raise_to(n)
           for i in 1:n
               y = (1/7)^n
           end
       end
raise_to (generic function with 1 method)
julia> @time raise_to(10)
  0.093018 seconds (26.00 k allocations: 1.461 MiB)

@time
宏可用于告诉您计算函数所需的时间。它还提供了如何分配内存

julia> function raise_to(n)
           for i in 1:n
               y = (1/7)^n
           end
       end
raise_to (generic function with 1 method)
julia> @time raise_to(10)
  0.093018 seconds (26.00 k allocations: 1.461 MiB)

建议使用以下方法对函数进行基准测试:

请注意,多次重复计算(就像您在示例中所做的那样)是获得更精确测量的好主意。但是
benchmarktools
为您提供了这一功能

还请注意,
BenchmarkTools
避免了仅仅使用
@time
的许多陷阱。最值得注意的是,使用
@time
,除了运行时间之外,您还可以测量编译时间。这就是为什么第一次调用
@time
通常会显示较大的时间/分配:

# First invocation: the method gets compiled
# Large resource consumption
julia> @time raise_to(10)
  0.007901 seconds (7.70 k allocations: 475.745 KiB)
3.5401331746414338e-9

# Subsequent invocations: stable and low timings
julia> @time raise_to(10)
  0.000003 seconds (5 allocations: 176 bytes)
3.5401331746414338e-9

julia> @time raise_to(10)
  0.000002 seconds (5 allocations: 176 bytes)
3.5401331746414338e-9

julia> @time raise_to(10)
  0.000001 seconds (5 allocations: 176 bytes)
3.5401331746414338e-9

建议使用以下方法对函数进行基准测试:

请注意,多次重复计算(就像您在示例中所做的那样)是获得更精确测量的好主意。但是
benchmarktools
为您提供了这一功能

还请注意,
BenchmarkTools
避免了仅仅使用
@time
的许多陷阱。最值得注意的是,使用
@time
,除了运行时间之外,您还可以测量编译时间。这就是为什么第一次调用
@time
通常会显示较大的时间/分配:

# First invocation: the method gets compiled
# Large resource consumption
julia> @time raise_to(10)
  0.007901 seconds (7.70 k allocations: 475.745 KiB)
3.5401331746414338e-9

# Subsequent invocations: stable and low timings
julia> @time raise_to(10)
  0.000003 seconds (5 allocations: 176 bytes)
3.5401331746414338e-9

julia> @time raise_to(10)
  0.000002 seconds (5 allocations: 176 bytes)
3.5401331746414338e-9

julia> @time raise_to(10)
  0.000001 seconds (5 allocations: 176 bytes)
3.5401331746414338e-9
@时间
@time
的工作原理与前面的答案中提到的一样,但如果是您在会话中第一次调用函数,它将包括编译时

@B时间 如果将
使用基准工具
放入代码中,也可以使用
@btime

这将在初始编译运行后多次重新运行函数,然后平均运行时间

julia> using BenchmarkTools
julia> @btime sin(x) setup=(x=rand())
  4.361 ns (0 allocations: 0 bytes)
0.49587200950472454
@时间 另一个非常有用的评测库是
TimerOutputs.jl

宏可以有
begin
<代码>结束 如这些函数的文档所示,它们可以涵盖多个语句或函数

@my_macro begin
  statement1
  statement2
  # ...
  statement3
end
希望能有所帮助。

@time
@time
的工作原理与前面的答案中提到的一样,但如果是您在会话中第一次调用函数,它将包括编译时

@B时间 如果将
使用基准工具
放入代码中,也可以使用
@btime

这将在初始编译运行后多次重新运行函数,然后平均运行时间

julia> using BenchmarkTools
julia> @btime sin(x) setup=(x=rand())
  4.361 ns (0 allocations: 0 bytes)
0.49587200950472454
@时间 另一个非常有用的评测库是
TimerOutputs.jl

宏可以有
begin
<代码>结束 如这些函数的文档所示,它们可以涵盖多个语句或函数

@my_macro begin
  statement1
  statement2
  # ...
  statement3
end

希望对您有所帮助。

相关的也相关的也相关的也相关的您需要调用
@time
两次,否则您也会测量编译时间,这通常是您不想做的。这是对Julia代码进行基准测试时经常犯的错误。
@time
宏不适用于微基准测试,只适用于长时间运行的函数。为此,请始终使用基准测试工具。您需要调用
@time
两次,否则您还需要测量编译时间,而这通常是人们不想做的。这是对Julia代码进行基准测试时经常犯的错误。
@time
宏不适用于微基准测试,只适用于长时间运行的函数。为此,请始终使用基准工具。