How to save @time output in a file or variable?

Hello,
please consider this code:

for N = [10 20 30]
for C = [0.1 0.2]
@time my_function(N,C);
end 
end

The my_function is a defined function.
My question is How I can save @time output in a file so that after running the code I can access the results in a separate file like timings.txt? or if it is possible to save the time output in a variable so that it can be used later?
Thank you for your time.

You might like TimerOutputs

Alternatively, you could use @elapsed

my_function(x,y) = x+y
my_function(1,0.1)  # Warm up.
timings = Array{Float64}(3,2)
for (i,N) = enumerate([10 20 30])
    for (j,C) = enumerate([0.1 0.2])
        timings[i,j] = @elapsed my_function(N,C);
    end 
end
julia> timings
3×2 Array{Float64,2}:
 6.1e-8  2.3e-8
 1.7e-8  1.7e-8
 6.7e-8  1.7e-8

And then if you want to save it, just use writedlm.

I personally prefer TimerOutputs, because it does some quite useful statistics for you automatically. It all depends on your taste though.

5 Likes

That was a great help. The package is useful but my problem is this package is not installed on my system and I can`t install it either.
so is there any way to do it in another form, not using any special package?

You can install any package with Pkg.add. In this case, you just need to run

Pkg.add("TimerOutputs")

Julia is a little different from systems like MATLAB in that you will need to install packages even to do simple tasks.

If you don’t want to use any packages, then I think that the solution that I gave above should work for you. You might also like these functions/macros:

help?> tic
search: tic tick_params ticklabel_format zticks yticks xticks issticky

  tic()

  Set a timer to be read by the next call to toc or toq. The macro call @time
  expr can also be used to time evaluation.

  julia> tic()
  0x0000c45bc7abac95
  
  julia> sleep(0.3)
  
  julia> toc()
  elapsed time: 0.302745944 seconds
  0.302745944

help?> toc
search: toc touch autoscale getsockname trylock TCPSocket bitbroadcast

  toc()

  Print and return the time elapsed since the last tic. The macro call @time
  expr can also be used to time evaluation.

  julia> tic()
  0x0000c45bc7abac95
  
  julia> sleep(0.3)
  
  julia> toc()
  elapsed time: 0.302745944 seconds
  0.302745944

help?> @allocated
  @allocated

  A macro to evaluate an expression, discarding the resulting value, instead
  returning the total number of bytes allocated during evaluation of the
  expression. Note: the expression is evaluated inside a local function,
  instead of the current context, in order to eliminate the effects of
  compilation, however, there still may be some allocations due to JIT
  compilation. This also makes the results inconsistent with the @time macros,
  which do not try to adjust for the effects of compilation.

  See also @time, @timev, @timed, and @elapsed.

  julia> @allocated rand(10^6)
  8000080

help?> @timed
  @timed

  A macro to execute an expression, and return the value of the expression,
  elapsed time, total bytes allocated, garbage collection time, and an object
  with various memory allocation counters.

  See also @time, @timev, @elapsed, and @allocated.

  julia> val, t, bytes, gctime, memallocs = @timed rand(10^6);
  
  julia> t
  0.006634834
  
  julia> bytes
  8000256
  
  julia> gctime
  0.0055765
  
  julia> fieldnames(typeof(memallocs))
  9-element Array{Symbol,1}:
   :allocd
   :malloc
   :realloc
   :poolalloc
   :bigalloc
   :freecall
   :total_time
   :pause
   :full_sweep
  
  julia> memallocs.total_time
  5576500

4 Likes

That works. Thank you.

For those that nowaday use BenchmarkTools:

using BenchmarkTools
t       = @benchmark myfunction($arg)
minTime =  minimum(t.times)
2 Likes

The right answer to the original question at that time and today would probably be either @elapsed or @timed both from Base.

4 Likes