es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 llamas pmap, 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.

Comments are closed.