我刚开始了解如何使用 GPU 进行编码。 我见过带有 Nvidia GPU 的 CUDA。 我在CPU上的代码是用BlackBoxOptim.jl的优化方法如下:
px_values = collect(-4.5/ang:0.25/ang:4.5/ang)
py_values = collect(-4.5/ang:0.25/ang:4.5/ang)
min_energy_values = zeros(length(px_values),length(py_values))
for i in axes(px_values,1)
Threads.@threads for j in axes(py_values,1)
px=px_values[i]
py=px_values[i]
f1 = (y) -> Hexpecvalue(px,py,y)./NormalWF(y)
result =bboptimize(f1,[1,0,5.0]; SearchRange=[(0,10),(1,10)],MaxFuncEvals=1250)
min_energy_values=best_fitness(result)
end
end
结束
但我现在希望能够通过 GPU 实现这一点。
我看到首先我们必须介绍 CUArryays,即:
px_values = CUDA.CuArray(collect(-4.5/ang:0.25/ang:4.5/ang))
py_values = CUDA.CuArray(collect(-4.5/ang:0.25/ang:4.5/ang))
min_energy_values = CUDA.zeros(length(px_values), length(py_values)).
但是,我不确定如何开始完全设置 CUDA 以使我能够做到这一点。
对此有不同的选择,您可能值得研究一下有关 GPU 编程的更一般的介绍(不仅仅是 Julia)。一般来说,在 GPU 上,您希望避免数组的标量索引,因此常规 for 循环通常不合适。
map
解决的方式来表述你的问题,并且不再需要 for
循环。这只是一个非常简短的概述。尝试将您的问题表述为“最小的、可重现的”示例(参见此处),您更有可能获得一些更具体的帮助。它确实就像您在每个元素的 for
循环中执行某种优化。如果没有 MWE 或更多上下文,就很难判断这是否真的可以轻松高效地在 GPU 上运行。