在Julia中使用struct和loop时速度会奇怪地减慢
我对使用和不使用struct的两个函数进行了速度比较,如下所示,其性能差异非常大:0.07899 vs 0.0011[秒]。奇怪的是,在Julia中使用struct和loop时速度会奇怪地减慢,julia,Julia,我对使用和不使用struct的两个函数进行了速度比较,如下所示,其性能差异非常大:0.07899 vs 0.0011[秒]。奇怪的是,test1()和test2()中idxset的内容完全相同(1…10000),但这两个循环的处理时间不同。请注意,测量仅针对回路进行 你能解释一下如何用struct改进我的代码,以及为什么会这样吗 struct Data bool end function test1() N = 10^5 data = Data(trues(N))
test1()
和test2()
中idxset的内容完全相同(1…10000),但这两个循环的处理时间不同。请注意,测量仅针对回路进行
你能解释一下如何用struct改进我的代码,以及为什么会这样吗
struct Data
bool
end
function test1()
N = 10^5
data = Data(trues(N))
idxset = findall(data.bool)
s=0.0
@time for i in idxset
s += i^2
end
return s
end
function test2()
N = 10^5
bool = trues(N)
idxset = findall(bool)
s=0.0
@time for i in idxset
s += i^2
end
return s
end
test1()
test2()
没有关于bool的任何类型信息,因此data.bool
无法推断类型,导致函数中的类型未找到,代码速度变慢data.bool
被取消查询可能会导致idxset
被取消查询,这会导致每个i
被取消查询并减慢运算速度。请使用@code\u warntype
检查此项。用以下方法解决此问题:
struct Data
bool::BitArray{1}
end
或者,如果您不费心手动找出确切的类型(
BitArray{1}
)和/或保留数据,请选择struct Data{T}bool::T end
。
struct Data
bool::BitArray{1}
end