我们有一个单线程应用程序,可以模拟数十万个对象随着时间的推移与共享内存模型的交互。
显然,它无法扩展到多CPU硬件。
这个想法非常简单 - 每个对象都是一个演员,他们的交互将是消息,因此模拟可以并行发生。给定特定时间的对象配置 - 可以很容易地计算其未来结果。
问题是如何模拟时间:
例如,让我们假设对象X的行为取决于A和B,因为演员和消息计算顺序不能保证可能是在计算X时A已经将其消息发送到X但是B没有。
如何确保计算正确发生?
我希望问题很清楚 提前谢谢。
答案 0 :(得分:8)
使用消息传递来并行化(离散事件?)模拟的方法是众所周知的,并且本身不需要功能样式(当然,这并不妨碍您像这样实现它)。
你描述的基本问题w.r.t.对事件的时间安排也称为本地因果关系约束(例如,参见this textbook)。基本上,您需要使用同步协议来确保每个对象(或代理)以正确的顺序处理其消息。在并行离散事件模拟领域,这些对象称为逻辑进程,它们通过事件(即带时间戳的消息)进行通信。
正确实施这些事件的同步协议具有挑战性,正确的协议选择是高度特定于应用程序。例如,一个重要因素是每个事件所需的平均计算量:如果需要的计算量很少,则通信成本将占据总体执行时间,并且难以扩展模拟。
因此,我建议在您从头开始之前,在您打算使用的actor框架之上寻找现有的解决方案/库。