所以我试图使用ArrayFire.jl来加速一些Julia代码,但是我所做的一切都在减慢它的速度。使用@profile
,我已将问题追踪到setindex!
。这是测试代码:
using ArrayFire
function f(x::Array{Float32})
y = zeros(Float32, size(x))
for i in 1:length(x)
y[i] = x[i]
end
return y
end
function f(x::AFArray{Float32})
y = AFArray(zeros(Float32, size(x)))
for i in 1:length(x)
y[i] = x[i]
end
return y
end
srand(1)
a = rand(Float32, 20, 20)
b = AFArray(a)
@time f(a)
@time f(b)
这两者之间的速度差异五个数量级。
根据分析器,setindex!
真的很慢的原因是因为af_assign_gen
和af_sum_all
非常慢。
我错过了什么吗?我是GPGPU编程的完全新手,所以我可能根本不理解这一切是如何工作的。