是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是啥?

Posted

技术标签:

【中文标题】是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是啥?【英文标题】:Is it possible to have nested tic() and toc() in Julia as in Matlab? If not what is the way around it?是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是什么? 【发布时间】:2015-04-13 19:41:29 【问题描述】:

是否可以在 Julia 中调用嵌套的 tic() 和 toc() ? 问题是我无法将我选择的计时器名称发送到 toc() 函数。

Matlab 中的类似内容(我引用 Matlab 帮助)

`

REPS = 1000;   minTime = Inf;   nsum = 10;
tic;  % TIC, pair 1

for i=1:REPS
   tStart = tic;  % TIC, pair 2  
   total = 0;
   for j=1:nsum 
      total = total + besselj(j,REPS);
   end

   tElapsed = toc(tStart);  % TOC, pair 2  
   minTime = min(tElapsed, minTime);
end
averageTime = toc/REPS;  % TOC, pair 1  `

【问题讨论】:

【参考方案1】:

看起来可以,如果这不是嵌套tictoc 的意思,请告诉我。

tic()
sleep(1)
tic()
sleep(1)
toc() # elapsed time: 1 second
sleep(1)
toc() #elapsed time: 3 seconds

此外,如果您想在 Julia 中计时,使用@time 宏会更容易,它还可以跟踪内存分配。

@time (sleep(1); @time sleep(1);)
# elapsed time: 1 second, 672 bytes allocated
# elapsed time: 2.13 seconds, 6 MB allocated

不幸的是,看起来还没有预定义的函数来使用tic 的返回值。您可以使用time_ns 函数编写自己的代码。

function toc(t0)
  t1 = time_ns()
  t = (t1 - t0) / 1e9
  println("elapsed time: ", t, " seconds")
  return t
end

【讨论】:

不幸的是,当前的答案无助于解决问题。 @user25004 我又添加了一些,如果有帮助请告诉我。 是的,谢谢。 time_ns() 是我不知道的函数:-) 有趣的是,这样一个toc函数返回的值,与原来的toc函数返回的值不匹配。【参考方案2】:

请注意,如果您需要对多行进行计时,则可以将计时宏 @time@eleapsed 与块参数一起使用。

@time begin
    do_something()
    do_something_more()
end

但由于 Julia 的运行时语义强烈支持函数和局部变量,通常最好将代码块包装在函数中,而不是在全局范围内运行。

【讨论】:

以上是关于是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以像在 VS 中拖动箭头一样在 java eclipse 调试器中“返回”

是否可以像在 Android Studio 中一样在 Eclipse 中使用 Firebase? [复制]

是否可以像在 gmail 中一样在 php 中发出“哔”声

是否可以像在 Vuforia 中一样在 ARKit 中跟踪对象?

Julia中Matlab的cell2mat的等价性是什么?

Julia 入门学习教程