我只想更改一个元素,如下面的代码所示。
using Flux, CuArrays
a = rand(3,3) |> gpu
CuArrays.allowscalar(false)
a[1, 1] = 1.0f0
因为allowscalar设置为false,所以自然会出现如下。
ERROR: scalar setindex! is disallowed
但是如果allowscalar被删除,它会如下所示。
Performing scalar operations on GPU arrays: This is very slow, consider disallowing these operations with allowscalar(false)
我在访问元素的部分之前和之后打开和关闭了“allowscalar”。然后,它比“allowscalar”设置为 true 时慢了大约 20 倍。
接下来,我尝试在 CPU 上创建另一个矩阵,然后在 GPU 上将这些矩阵相加,如下所示。
b = zeros(Float32, 3, 3)
b[1, 1] = 1.0f0
b = b |> gpu
a .+= b
但是,如果我假设我可以像下面这样单独在 GPU 上完成它,它会快 4 倍左右。
a .*= 1.0f0 # Dummy calculations that do some processing on the GPU
a .+= a # Dummy calculations that do some processing on the GPU
如何访问 CuArray 中的元素并更改其值?我希望早日收到你的来信。