Performance ArrayFire.jl setindex!很慢
因此,我尝试使用ArrayFire.jl来加速一些Julia代码,但我所做的只是降低它的速度。使用Performance ArrayFire.jl setindex!很慢,performance,gpu,julia,gpgpu,arrayfire,Performance,Gpu,Julia,Gpgpu,Arrayfire,因此,我尝试使用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::AFA
@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\u assign\u gen
和af\u sum\u all
非常慢
我错过什么了吗?我是GPGPU编程的新手,所以我可能根本不理解这一切应该如何工作。for
循环不在GPU上运行,因此每次迭代都有同步步骤和相对昂贵的CPU->GPU内存写入。如果您使用“支持的函数”中列出的数组函数,而不是任意代码,那么您将真正看到性能提升。(另外,请务必阅读ArrayFire.jl文档中的“关于REPL行为的说明”和“关于基准测试的说明”)