Pregunta

Si planea escribir una aplicación paralela muy computacional, qué pautas usaría para diseñar sus objetos (ya sean clases o estructuras, o cualquier otra cosa) para maximizar su potencial de obtener el máximo provecho del paralelismo.

Estoy pensando en una aplicación que diga interpreta / compila un gráfico en forma de árbol de objetos que requieren crear cosas, pasarlo a otro objeto para ser procesado, y así sucesivamente, con una estructura de tipo árbol.

¿Qué se debe considerar desde el proceso de diseño temprano?

¿Fue útil?

Solución

Si está creando cosas y luego pasándolas para ser procesadas, es casi seguro que puede diseñar su aplicación para usar paso de mensaje y aislamiento del objeto.

El primer paso será identificar las responsabilidades, es decir, identificar quién manejará qué. Todos los que están redondeados por una caja.

El segundo paso será definir el flujo de información entre las cajas, es decir, si A produce X ... ¿quién lo consume?

Después de esos dos pasos, tendrás un gráfico simple con hojas que representan trabajadores y flechas que representan mensajes. Cada flecha representa un orden de dependencia (es decir, si una flecha va de A a B, entonces A debe ejecutarse antes de B).

Con esto, podrás ver fácilmente qué acciones se pueden hacer paralelas y qué acciones son secuenciales en una gráfica fácil de ver, fácil de mostrar.

Luego simplemente implemente una estructura Pipe para le permite pasar mensajes entre trabajadores para que cada trabajador tenga un flujo de trabajo.

En una nota final: una vez que se realiza el diseño original, es relativamente fácil refactorizarlo para mejorar. Por ejemplo, los nodos que hacen el mismo trabajo pueden compartir PIPES de trabajo, por lo que 8 analizadores de sintaxis consumen desde el " token léxico " o cámbielo para que los trabajadores puedan " robar " trabajar desde otras tuberías de trabajadores, etc.

Otros consejos

Si puede salir adelante con el uso de una gran cantidad de estructuras de datos inmutables, eso le ahorrará mucho tiempo, escritura y dolor de cabeza.

El patrón que Jorge C & # 243; rdoba describe anteriormente es solo un enfoque. Definitivamente vale la pena leer lo siguiente:

http://www.amazon.com/Patterns-Parallel-Programming-Software / dp / 0321228111

Depende mucho de las dependencias entre sus datos en cuanto a la mejor manera de descomponer su problema. Por ejemplo, patrones como Master-Worker y datos múltiples de un solo programa (SPMD, por sus siglas en inglés) tienden a ser enfoques muy simples si su problema se adapta a sunch y enfoque.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top