TypeError al usar pmap en Julia 1.6.1
He estado trabajando en paralelizar una función que lee una entrada de polinomios y produce sus raíces. Los polinomios están en forma de una matriz con columnas siendo cada polinomio. Funciona perfectamente al llamar directamente, pero tengo un comportamiento extraño una vez que uso pmap.
usando Distribuido
@todos comienzan
usando PolynomialRoots
end
addprocs(2)
@todos globales prueba = ones(Int64, 10,10)
@todos comienzan
función polyRootS(n)
q = prueba[:,n]
r = roots(q) # proporciona las raíces de un polinomio a partir de una entrada de vector
return r
end
end
función parPolyRoots()
pmap(x -> polyRootS(x) ? error("falló") : x, 1:10; on_error=identity)
end
para i en 1:10
r = polyRootS(i)
println(r)
end
parPolyRoots()
Hasta donde he leído, pmap debería en efecto sólo paralelizar el bucle al llamar polyRootS, sin embargo, obtengo las salidas:
ComplexF64[0.30901699437494734 + 0.9510565162951534im, 0.8090169943749473 – 0.587785252292473im, -0.8090169943749473 – 0.587785252292473im, -0.8090169943749475 + 0.587785252292473im, 0.8090169943749475 + 0.5877852522924731im, 0.30901699437494745 – 0.9510565162951535im, -1.0 – 7.671452424696258e-18im, -0.30901699437494734 – 0.9510565162951536im, -0.3090169943749474 + 0.9510565162951536im]
para mi matriz de prueba y
TypeError(:if, “”, Bool, ComplexF64[0.30901699437494734 + 0.9510565162951534im, 0.8090169943749473 – 0.587785252292473im, -0.8090169943749473 – 0.587785252292473im, -0.8090169943749475 + 0.587785252292473im, 0.8090169943749475 + 0.5877852522924731im, 0.30901699437494745 – 0.9510565162951535im, -1.0 – 7.671452424696258e-18im, -0.30901699437494734 – 0.9510565162951536im, -0.3090169943749474 + 0.9510565162951536im])
para mi llamada de función pmap. Así que estoy bastante desconcertado. Si alguien pudiera señalarme a alguna documentación diferente para pmap y/o unos pocos ejemplos, eso sería especialmente útil.
Una pregunta diferente, ¿puedo comenzar una declaración @everything begin end y cubrir mis funciones definidas, datos y paquetes de una sola vez o es la mejor práctica aislarlos individualmente?
Usando Julia 1.6.1 en VSCode con extensión Julia. Ejecutando en Win10 con Intel i5.
davy.ai
Parece que estás teniendo problemas al usar
pmap
para paralelizar tu función que lee una entrada de polinomios y genera sus raíces. Al parecer, cuando llamaspmap
, estás obteniendo un comportamiento extraño, mientras que la misma función funciona perfectamente bien cuando se llama directamente.Puede ser útil mirar la documentación para
pmap
y ver algunos ejemplos de cómo se utiliza.Es una buena práctica aislar individualmente las funciones, datos y paquetes en declaraciones
@everywhere begin ... end
. Esto asegurará que cada elemento esté definido correctamente y sea accesible.