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.

Resolución de varios problemas de manera simultánea con una aplicación multihilo y el solucionador XPRESS.

Estoy tratando de convertir una aplicación de un solo hilo que utiliza el solucionador Fico Xpress para que resuelva varios problemas de manera simultánea con OpenMP. El método de licencia que estoy utilizando está limitado a 1 proceso, por lo que un programa multihilo teóricamente debería funcionar.

Para cada hilo, necesitaría que el programa haga lo siguiente:

  1. Ejecutar un modelo.
  2. Extraer el problema.
  3. Resolver el problema.

Sin embargo, sigo obteniendo errores de segmentación y errores como los siguientes:

Mosel: E-84: El archivo `mem:0x7f5c9a0ca640/2000/0x7f5c9a0ca5c0' no puede ser renombrado.
Mosel: E-83: No se puede cargar el archivo Bim `mem:0x7f5c9a0ca640/2000/0x7f5c9a0ca5c0'.

Por ejemplo, tomé el código de muestra de esta página.

  1. Lo ejecuté sin realizar ninguna modificación y funciona.
  2. Añadí un for(int i = 0; i < 100; i++) y funcionó, en un solo hilo.
  3. Paralelicé utilizando #pragma omp parallel for y surgió el error “el modelo no puede ser renombrado”.
  4. Añadí #pragma omp critical dentro del parallel for (con fines de prueba) de la siguiente manera y funcionó:
int main(){
    #pragma omp parallel for
    for (int i = 0; i < 100; i++){
        #pragma omp critical
        {
            ... variables y código ...
        } // fin de la región crítica
    } // fin del bucle for
}

No pude hacer que ninguno de los ejemplos funcionara después de hacerlos multihilo, por lo que parece ser una limitación del solucionador, la licencia o la forma en que lo estoy utilizando. Estoy utilizando una licencia de dongle.

Sé que Xpress tiene cierto soporte para la búsqueda MIP multihilo para un solo problema, pero estoy interesado en búsquedas concurrentes de un solo hilo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en C, multithreading, OpenMP, Mosel y Xpress-Optimizer, entiendo el problema que estás enfrentando al intentar convertir una aplicación de un solo hilo que utiliza el solucionador Fico Xpress para resolver varios problemas simultáneamente con OpenMP. El método de licencia que estás utilizando está limitado a 1 proceso, por lo que teóricamente un programa multithreaded debería funcionar. Sin embargo, sigues obteniendo errores de segmentación y mensajes como “no se puede renombrar el modelo” y “no se puede cargar el archivo bim”.

    Después de revisar el código de muestra proporcionado, puedo ver que el problema surgió cuando intentaste paralelizar el código utilizando #pragma omp parallel for. Para evitar que múltiples hilos accedan a la misma variable o recurso al mismo tiempo, agregaste #pragma omp critical dentro del bucle parallel for. Esto ayuda a asegurar que solo un hilo pueda acceder a una parte específica del código a la vez, evitando así problemas como condiciones de carrera y bloqueos.

    También entiendo que Xpress tiene un cierto nivel de soporte para la búsqueda Multithreaded MIP (Programación entera mixta y de enteros) para un solo problema, pero en tu caso, estás interesado en búsquedas simultáneas de un solo hilo. Esto puede ser una limitación del solucionador, la licencia o la forma en que lo estás utilizando.

    Para resolver los mensajes de error que estás obteniendo, te sugiero revisar la documentación de Fico Xpress y contactar a su equipo de soporte técnico para obtener ayuda adicional. Ellos pueden proporcionarte más información sobre las limitaciones de su licencia y ofrecer sugerencias sobre cómo optimizar tu código para lograr el resultado deseado.

Comments are closed.