6

我们有一个单线程应用程序,可以模拟数十万个对象随时间与共享内存模型的交互。
显然,它无法在多 CPU 硬件上扩展。

在阅读了一些关于基于代理的建模和函数式编程/演员模型之后,我正在考虑使用消息传递范式进行重写。

这个想法非常简单——每个对象都是一个演员,它们的交互将是消息,这样模拟就可以并行发生。在特定时间给定对象的配置 - 它的未来后果可以很容易地计算出来。

问题是如何对时间进行建模:
例如让我们假设对象 X 的行为取决于 A 和 B,因为不能保证参与者和消息的计算顺序可能是当要计算 X 时 A 已经发送它给 X 的信息,但 B 没有。如何确保计算正确发生?

我希望问题很清楚
,谢谢。

4

1 回答 1

9

您使用消息传递来并行化(离散事件?)模拟的方法是众所周知的,并且本身不需要功能样式(当然,这并不妨碍您像那样实现它)。

您针对事件时间描述的基本问题也称为局部因果约束(例如,请参见本教科书)。基本上,您需要使用同步协议来确保每个对象(或代理)以正确的顺序处理其消息。在并行离散事件模拟领域,这样的对象被称为逻辑过程,它们通过事件(即带时间戳的消息)进行通信。

为这些事件正确实现同步协议具有挑战性,并且协议的正确选择是高度特定于应用程序的。例如,一个重要因素是每个事件所需的平均计算量:如果需要的计算量很少,则通信成本将主导整个执行时间,并且很难扩展模拟。

因此,我建议在从头开始之前在您打算使用的演员框架之上寻找现有的解决方案/库。

于 2012-11-25T20:26:13.583 回答