parallel processing - programacion - Escritura de pseudocódigo para programación paralela.
programacion paralela pdf (6)
¿Ha considerado tomar un enfoque de desarrollo conducido por comportamiento? Recientemente armé una pieza de código multiproceso / multinúcleo bastante complicada utilizando un enfoque BDD y lo encontré muy útil. La mejor parte del enfoque fue que podía describir todo en un lenguaje sencillo y centrarme en el problema en lugar de en los detalles de la implementación. Mis primeras iteraciones fueron de un solo hilo para asegurar que el código pasara todas las pruebas y resolviera el problema. Mejoré el rendimiento del sistema al aprovechar el multiprocesamiento en los lugares seleccionados y me aseguré de que no rompiera las pruebas que el sistema de un solo hilo aprobó. La refactorización fue mucho más fácil porque el código ya era significativamente más simple que si hubiera diseñado cosas alrededor de los detalles de diseño de optimización de manera prematura y podría concentrarme en monitorear los tiempos de procesamiento de los sistemas re-factorizados ya que estaba obteniendo exactamente los mismos resultados que las iteraciones anteriores.
Eche un vistazo al libro Test Driven Development for Embedded C para obtener algunas ideas. Aproveché este libro durante mi desarrollo y lo he convertido en una parte permanente de mi biblioteca.
¿Cómo se escribe un pseudocódigo para la programación paralela? Especialmente, ¿cómo se diferencian las variables locales y compartidas? ¿Cómo representa operaciones como dispersión, recopilación, reducción, difusión y comunicaciones punto a punto? ¿Hay algún estándar al respecto?
El pseudo código es prácticamente solo inglés. Entonces, puedes usar lo que sea claro y no ambiguo. No es un lenguaje de programación, por lo que no necesita representar operaciones como "dispersión" ... solo puede decir "dispersión".
No hay estándares para el pseudocódigo, pero un buen pseudocódigo es simple y fácil de entender.
Encontré al menos un pseudo-lenguaje para la programación paralela: Peril-L . Es formal, pero un nivel demasiado bajo para mi gusto.
Este ensayo de Matthew Adams es probablemente la mejor introducción que he visto a través del proceso de subprocesos múltiples utilizando una forma de pseudocódigo.
Intente "escribir los diagramas" aquí: http://www.websequencediagrams.com/
Terminará con lo mejor de ambos mundos, declaraciones en inglés bastante simples ("pseudo código") y diagramas limpios. He podido explicar la programación paralela bastante compleja a mis gerentes y compañeros utilizando estos diagramas. Por último, pero no por ello menos importante, se puede verificar en el diagrama "fuente" en el sistema de control de fuente.
La respuesta breve a su pregunta es que no existe una forma convencional de escribir pseudocódigo para la programación en paralelo.
Esto se debe a que existe una variedad de formas de hacer programación paralela, en términos de diferentes arquitecturas paralelas (p. Ej., SMP, GPU, clústeres y otros sistemas exóticos) y enfoques de programación paralela. Me refiero a ''enfoques de programación'' porque, en general, la mayoría son bibliotecas o anotaciones en lugar de lenguajes (vea MPI, OpenMP, TBB, etc.). Por lo tanto, incluso si puede elegir una arquitectura y un idioma, tendrá dificultades para definir la semántica de una biblioteca o sistema de anotaciones.
Afortunadamente, se han desarrollado enfoques de programación más rigurosamente definidos. Sin embargo, generalmente se basan en la memoria compartida o en el paso de mensajes. Encontrar una notación / seudocódigo adecuado dependerá de en qué medida necesita que se defina la semántica y de los tipos de problemas de programación en paralelo que está intentando expresar.
Aquí hay dos sugerencias:
- PRAM . La programación de la memoria compartida está estrechamente relacionada con el modelo de cálculo de la máquina de acceso aleatorio (PRAM) paralela. Esto ha sido ampliamente estudiado y muchos algoritmos desarrollados en él. Una búsqueda rápida de la literatura traerá notaciones PRAM adecuadas.
- CSP . La comunicación de procesos secuenciales (CSP) es un formalismo (álgebra) para expresar y razonar sobre los sistemas de paso de mensajes. Ha sido influyente en el diseño de muchos idiomas, en particular occam .
El modelo de PRAM es muy simple y debe utilizarse como base para las notaciones de programación de memoria compartida. El CSP en sí mismo puede ser demasiado matemático para un pseudocódigo y la notación oculta puede ser demasiado detallada. Esta fue la opinión de Brinch Hansen (un gran programador concurrente) que diseñó su propio lenguaje relacionado, SuperPascal, para ser usado como una notación para la explicación de algoritmos paralelos en publicaciones.
Que yo sepa, no se han desarrollado otros lenguajes para computación paralela que puedan definirse de manera rigurosa y / o que sean adecuados para ser utilizados como una notación de alto nivel.