¿Cómo ejecutar una función paralela en Julia?
Me gustaría ejecutar la función f() en mis 4 procesadores (Intel i7) y obtener la suma de los números aleatorios, de la siguiente manera:
using Distributed;
@everywhere function f()
return sum(rand(10000))
end
@sync for w in workers()
@async begin
res = @spawnat w f()
values[w-1] = fetch(res)
end
end
Sin embargo, estoy obteniendo el siguiente error:
ERROR: TaskFailedException
nested task error: MethodError: no method matching setindex!(::typeof(values), ::Float64, ::Int64)
Stacktrace:
[1] macro expansion
@ ./REPL[58]:4 [inlined]
[2] (::var"#68#70"{Channel{Any}, Int64})()
@ Main ./task.jl:411
Stacktrace:
[1] sync_end(c::Channel{Any})
@ Base ./task.jl:369
[2] top-level scope
@ task.jl:388
¡Por favor, guíame para resolver el problema!
davy.ai
Parece que el error se debe a que la variable
values
no está definida. Necesitas definir la variable antes de usarla en el bucle for. Aquí te muestro cómo puedes modificar tu código para solucionar el error:En este código modificado, definimos la variable
values
como un arreglo de ceros con una longitud igual al número de trabajadores. Luego, usamosw
en lugar dew-1
para indexarvalues
en el bucle for. Finalmente, imprimimos la suma devalues
para ver el resultado.Espero que esto te ayude!