La co-programación es el principio que permite a los sistemas concurrentes programar procesos relacionados para que se ejecuten en diferentes procesadores al mismo tiempo (en paralelo ). Existen diversas implementaciones específicas para lograr esto.
Si una aplicación consta de varios procesos que trabajan en estrecha colaboración, y si algunos, pero no todos, están programados para su ejecución, los procesos en ejecución pueden intentar comunicarse con los que no lo están, lo que provocará su bloqueo. Eventualmente, los demás procesos se programarán para su ejecución, pero para entonces la situación podría invertirse, de modo que estos procesos también se bloqueen a la espera de interacciones con otros. Como resultado, la aplicación avanza a un ritmo máximo de una interacción entre procesos por intervalo de tiempo , lo que se traduce en un bajo rendimiento y una alta latencia .
Implementación
La programación conjunta se compone de dos ideas:
- Al programar cualquiera de los procesos del grupo relacionado, programe la ejecución de todos ellos para que puedan comunicarse de manera eficiente.
- Cuando un proceso del grupo se bloquea al comunicarse con otro proceso del mismo grupo, no lo elimine de su procesador. En su lugar, deje su estado cargado en el procesador durante un breve periodo, suponiendo que recibirá una respuesta pronto. Si transcurrido este tiempo el proceso aún no está listo para ejecutarse, asuma que permanecerá inactivo durante un tiempo prolongado y reasigne el procesador.
Algunas técnicas de co-planificación presentan fragmentos de procesos que no se ejecutan simultáneamente con el resto del conjunto co-planificado. Estos algoritmos suelen minimizar la aparición de estos fragmentos. La planificación en grupo es una variante más estricta de la co-planificación que prohíbe completamente los fragmentos.
Tipos de programación conjunta
Los investigadores han clasificado tres tipos de coprogramación: coprogramación explícita , programación local y coprogramación implícita o dinámica . [ 1 ]
La planificación conjunta explícita requiere que todo el procesamiento se realice al mismo tiempo y, por lo general, se implementa mediante una planificación global en todos los procesadores. Un algoritmo específico se conoce como planificación en grupo .
La programación conjunta local permite que cada procesador programe el procesamiento de forma independiente.
La programación conjunta dinámica (o implícita) es una forma de programación conjunta en la que los procesadores individuales aún pueden programar el procesamiento de forma independiente, pero toman decisiones de programación en cooperación con otros procesadores.
Historia
El término "co-programación" fue introducido por Ousterhout (1982) . La definición original es que el conjunto de trabajo del proceso debe ser co-programado (programado para ejecutarse simultáneamente) para que el programa paralelo progrese .
Véase también
Notas
- ↑ Fabrizio Petrini, Wu-chun Feng. Mejora de la utilización de recursos con programación conjunta con búfer , Journal of Parallel Algorithms and Applications, 2000
- Ousterhout, JK (1982). "Técnicas de planificación para sistemas concurrentes" (PDF) . Actas de la Tercera Conferencia Internacional sobre Sistemas de Computación Distribuida : 22–30 .
- Computación paralela
- Algoritmos de planificación de procesadores