Я хочу изменить только один элемент, как показано в приведенном ниже коде.
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» до и после части, которая обращается к элементу. Затем это было примерно в 20 раз медленнее, чем когда «allowscalar» было установлено в значение true.
Затем я попытался создать еще одну матрицу на CPU, а затем сложить матрицы на GPU, как показано ниже.
b = zeros(Float32, 3, 3)
b[1, 1] = 1.0f0
b = b |> gpu
a .+= b
Однако это примерно в 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 и изменить его значение? Я с нетерпением жду вашего ответа.