如果您打算编写一个计算量很大的并行应用程序,那么您将使用什么准则来设计对象(无论是类还是结构,还是其他任何东西),以最大限度地发挥从并行性中获得最大收益的潜力。

我正在考虑一个应用程序,它解释/编译一个类似于树的图形对象,这些对象需要创建东西,将它传递给另一个要处理的对象,等等,具有树状结构。

从早期的设计过程中应该考虑什么?

有帮助吗?

解决方案

如果你正在创建东西然后传递它进行处理,那么几乎可以肯定你可以设计你的应用程序来使用消息传递对象隔离。

第一步将确定责任,即确定谁将处理什么。每个被盒子围绕的人。

第二步将定义你的盒子之间的信息流,也就是说,如果A产生X ......谁消耗它?

在这两个步骤之后,您将拥有一个简单图表,其中叶子代表工人,箭头代表消息。每个箭头代表一个依赖顺序(即,如果是箭头从A到B然后A需要在B)之前执行。

通过这种方式,您将能够轻松地看到哪些操作可以并行执行,哪些操作确实是顺序的,图形易于查看,易于显示。

然后只需实施 Pipe 结构让在工作人员之间传递消息,以便每个工作人员都有工作流程。

最后说明:一旦原始设计完成,重构它就相对容易,以便改进。例如,进行相同工作的节点可以共享工作PIPES,因此8语法分析器从“lexic token”中消费。管道,或改变它,以便工人可以“偷”从其他工人管道等工作

其他提示

如果您可以使用大量不可变数据结构,那将为您节省大量时间,打字和头痛。

上面描述的Jorge Có rdoba模式只是一种方法。以下绝对值得一读:

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

这在很大程度上取决于您的数据之间的依赖关系以及分解问题的最佳方式。例如,如果您的问题适合于晒黑和接近,那么像Master-Worker和单程序多数据(SPMD)这样的模式往往是非常简单的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top