2

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

4

0 回答 0