Я новичок в параллельных вычислениях и сумел изменить свой код таким образом, чтобы он работал быстрее, чем мой непараллельный код, однако мои результаты немного отличаются.Я пытался использовать макросы @sync, @async, @threads и @distributed, но ни один из них, похоже, не дает правильного результата.
Цель состоит в том, чтобы найти кратчайший путь через лабиринт, и хотя непараллельный запуск кода работает нормально, кажется, что параллельный запуск кода не завершает все итерации алгоритма поиска и, в свою очередь, дает только кратчайший путь.через лабиринт, найденный одним из потоков / рабочих.
Он в основном работает, начиная с входа, перебирая все возможные точки, к которым он может перейти к выходу, затем выбирает точку, к которой он достиг самого быстрогои повторяет эти шаги, пока не будет достигнут выход.Он делает это, используя два не вложенных цикла for, но когда я увеличиваю скорость выполнения с помощью макросов, таких как @async или @distributed, он никогда не находит кратчайший путь.
Есть ли способ сделать это одновременно или параллельно, в то же время получая тот же результат в конце?
Редактировать:
Я добавил примерфункции, которая имеет ту же проблему.Как вы сможете получить такое же значение z в конце, ускоряя процесс параллелизации?
a = rand(1, 2, 15)
function stufftodo(a)
z = 0
y = rand(size(a)[1], size(a)[2]) .* 1000
for i in 1:size(a)[3]
x = a[:, :, i]
sleep(0.05)
if sum(y)>sum(x)
y=x
end
end
z = minimum(y)
end