编写用于并行编程的伪代码

你如何为并行编程编写伪代码?特别是,您如何区分本地和共享变量?您如何表示分散,收集,减少,广播和点对点通信等操作?那有什么标准吗?     
已邀请:
伪代码几乎只是英文。所以,你可以使用任何清晰明确的东西。它不是一种编程语言,因此您不需要表示“分散”等操作。您可以说“分散”。 伪代码没有标准,但好的伪代码简单易懂。     
我找到了至少一种用于并行编程的伪语言:Peril-L。这是正式的,但对我来说有点太低了。     
在这里尝试“编写图表”:http://www.websequencediagrams.com/ 你将最终得到两全其美,相当简单的英语陈述(“伪代码”)和干净的图表。我已经能够使用这些图表向我的经理和同事解释相当复杂的并行编程。最后但并非最不重要的是,可以将图表'source'检入源控制系统。     
对你的问题的简短回答是没有传统的方法来编写并行编程的伪代码。 这是由于在不同的并行体系结构(例如,SMP,GPU,集群和其他外来系统)和并行编程方法方面存在多种方式来进行并行编程。我指的是“编程方法”,因为一般来说,大多数是库或注释而不是语言(参见MPI,OpenMP,TBB等)。因此,即使您可以选择体系结构和语言,也很难定义库或注释系统的语义。 幸运的是,已经开发出更加严格定义的编程方法。但是,它们通常基于共享内存或消息传递。找到合适的符号/伪代码将取决于您需要定义语义的程度以及您尝试表达的并行编程问题的类型。 这有两个建议: PRAM。共享存储器编程与并行随机访问机器(PRAM)计算模型密切相关。这已经被广泛研究并且在其中开发了许多算法。快速搜索文献将带来合适的PRAM符号。 CSP。传递顺序过程(CSP)是一种用于表达和推理消息传递系统的形式(代数)。它在许多语言的设计中具有影响力,特别是在其中。 PRAM模型非常简单,应该用作共享内存编程符号的基础。 CSP本身对于伪代码可能过于数学化,并且occam符号可能过于冗长。这是Brinch Hansen(一个很好的并发编程)的观点,他设计了自己的相关语言SuperPascal,用作解释出版物中并行算法的符号。 据我所知,还没有开发出可以严格定义和/或适合用作高级表示法的其他并行计算语言。     
Matthew Adams撰写的这篇文章可能是我见过的最好的介绍,使用一种伪代码来完成多线程过程。     
您是否考虑采用行为驱动开发方法?我最近使用BDD方法将一个相当复杂的多进程/多核代码放在一起,发现它非常有用。这种方法最好的部分是我可以用简单的英语描述所有内容,并专注于问题而不是实现细节。我的前几次迭代是单线程的,以确保代码通过所有测试并解决了问题。我通过在选定位置利用多处理来增强系统性能,同时确保它不会破坏单线程系统通过的测试。重构要容易得多,因为代码已经非常简单,因为我过早地设计了优化设计细节,我可以专注于监控重新分解系统的处理时间,因为我得到的结果与之前的迭代完全相同。 一些想法,请参阅“嵌入式C的测试驱动开发”一书。我在开发过程中利用了这本书,并使其成为我图书馆的永久部分。     

要回复问题请先登录注册