如何计算主代码的时间?

时间:2019-01-02 05:35:54

标签: julia julia-jump

我有一个包含一些功能的代码。对于每个功能,我都使用CPUTime。但是在主模型中,我该如何计算时间。请帮助我。

例如

using CPUTime
function Sminf2(ZB,ZT)
    model=CreateModel();
    WES=model[1];f1=model[2];f2=model[3];
    rf1=model[4];rf2=model[5];lf1=model[6];
    lf2=model[7];
    x=WES[:x];
    y=WES[:y];
   JuMP.setRHS(rf1,ZB[1]);
   JuMP.setRHS(lf1,ZT[1]);
   JuMP.setRHS(rf2,ZT[2]);
   JuMP.setRHS(lf2,ZB[2]);
   @objective(WES,Min,f2);
  status=solve(WES)
  return getvalue(x)
end
@time @CPUtime Sminf2(ZB,ZT)

----------------------------------------------------- ------------------

但是在这个主要代码中我如何计算时间?

using JuMP,CPLEX,CPUTime
include("WEIGHT.juliarc (2).jl");
include("CreateModel.juliarc.jl");
include("Sminf2.juliarc.jl");
include("Sminf1.juliarc.jl");
pq=[];
model=CreateModel();
WES=model[1];f1=model[2];f2=model[3];
rf1=model[4];rf2=model[5];lf1=model[6];
lf2=model[7];ofv1=model[8];ofv2=model[9];
x=WES[:x];
y=WES[:y];
for i=1:5
     W=WEIGHT(Zb,Zt);
     pq=[pq;W[1]];
end
println("PQ=",pq)

----------------------------------------------------- -------------------------------

1 个答案:

答案 0 :(得分:3)

通常,建议使用BenchmarkTools.jl来对一段代码进行基准测试。

@time朱莉娅中的Base宏并行,BenchmarkTools导出通常更高级的@btime宏,该宏尤其避免了计算编译时间并执行了更精确的操作统计分析。 (有关详细信息,请参见软件包的文档)

您可以像使用@time宏一样使用它,例如@btime rand(2,2)

要对诸如“主代码”之类的代码块进行基准测试,您可以(并且应该)将该代码块放入函数或begin ... end块中。例如,

@btime begin
    # my code goes here
end

请注意,无论如何,建议不要将性能关键代码放入函数中,如Julia文档中的Performance Tips所述。

当然,已经引入了@btime,如果代码的运行时在编译期间占主导地位,那么在对整个代码(“主代码”)进行基准测试时可能就是这种情况,通常使用{ {1}}。阅读this recent discourse thread应该有启发性,其中已经讨论了如何正确使用@time的部分。