La programación conjunta es el principio para que los sistemas concurrentes de programación de procesos relacionados se ejecuten en diferentes procesadores al mismo tiempo (en paralelo ). Hay varias implementaciones específicas para realizar esto.
Si una aplicación consta de una colección de procesos que trabajan en estrecha colaboración, y si algunos de los procesos, pero no todos, están programados para su ejecución, los procesos en ejecución pueden intentar comunicarse con los que no se están ejecutando, lo que provocará que se bloqueen. Con el tiempo, se programará la ejecución de los otros procesos, pero en ese momento la situación puede revertirse de modo que estos procesos también bloqueen la espera de interacciones con otros. Como resultado, la aplicación avanza a una velocidad de como máximo una interacción entre procesos por segmento de tiempo , y tendrá un rendimiento bajo y una latencia alta .
Implementación
La programación conjunta consta de dos ideas:
- Al programar cualquiera de los procesos en el grupo relacionado, prográmelos todos para su ejecución para que puedan comunicarse de manera eficiente.
- Cuando un proceso en el grupo se bloquea mientras se comunica con otro proceso en el grupo, no lo elimine de su procesador. En su lugar, deje su estado cargado en su procesador por un corto tiempo, asumiendo que recibirá una respuesta en breve. Si transcurre este tiempo y el proceso aún no se puede ejecutar, entonces asuma que estará inactivo durante mucho tiempo y reprograme el procesador.
Algunas técnicas de programación conjunta muestran fragmentos de procesos que no se ejecutan al mismo tiempo que el resto del conjunto de programación conjunta. La aparición de estos fragmentos generalmente se minimiza mediante estos algoritmos. La programación de pandillas es una variante más estricta de la programación conjunta que rechaza los fragmentos por completo.
Tipos de programación conjunta
Los investigadores han clasificado tres tipos de programación conjunta: programación conjunta explícita , programación local y programación conjunta implícita o dinámica . [1]
La programación conjunta explícita requiere que todo el procesamiento se lleve a cabo al mismo tiempo y, por lo general, se implementa mediante programación global en todos los procesadores. Un algoritmo específico se conoce como programación de pandillas .
La programación conjunta local permite a los procesadores individuales programar 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 "programación conjunta" fue introducido por Ousterhout (1982) . La definición original es que el conjunto de trabajo del proceso debe programarse en conjunto (programado para su ejecución simultáneamente) para que el programa paralelo avance .
Ver también
Notas
- ^ Fabrizio Petrini, Wu-chun Feng. Utilización mejorada de recursos con programación de costos con búfer , Journal of Parallel Algorithms and Applications, 2000
- Ousterhout, JK (1982). "Técnicas de programación para sistemas concurrentes" (PDF) . Actas de la Tercera Conferencia Internacional sobre Sistemas de Computación Distribuida : 22–30.