julia代码执行时间gc time优化要合理,这是一个失败的案例


#1

julia是一门引入了自动垃圾回收机制的语言,何为gc time,详情见这里:http://www.pkofod.com/2017/04/24/timing-in-julia/
如果能优化julia代码里gc time的百分比,也许就提速了,这里是也许,下面就是一个失败的案例。

using Random
@time for i=1 : 100
a=bitrand(2000,2000);
b=bitrand(2000,2000);
c=convert(Array{Int},a .& b);
sum(c,dims=2)
end
println(“done by a .& b”)

@time for i=1 : 100
a=bitrand(2000,2000);
a=convert(Array{Int}, a);
b=bitrand(2000,2000);
b=convert(Array{Int}, a);
c=a + b;
sum(c,dims=2)
end
println(“done by a + b,easy look”)

@time for i=1 : 100
a=convert(Array{Int}, bitrand(2000,2000));
b=convert(Array{Int}, bitrand(2000,2000));
c=a + b;
sum(c,dims=2)
end
println(“done by a + b,mid look”)

@time for i=1 : 100
a=convert(Array{Int}, bitrand(2000,2000));
b=convert(Array{Int}, bitrand(2000,2000));
sum((a+b),dims=2)
end
println(“done by a + b,hard look”)

运行结果如下:
QQ%E5%9B%BE%E7%89%8720180820223534
可以看出来后面三种代码其实是没有本质区别,但是是在优化gc time的大路上前进,代码可读性持续降低,gc time多少都有降低。但是内存,和总耗时并没有降低,反而在增加。失败案例报告完毕,所以优化代码还是从算法或者引用函数上入手,不要写我这样又难看,有吃内存,吃C谱,吃时间的,吃香很难看的代码。


怎么知道一个操作构造了新对象,产生了gc时间