所以我正在尝试使用 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 编程的新手,所以我可能根本不理解这一切应该如何工作。