我们有一个单线程应用程序,可以模拟数十万个对象随着时间的推移与共享内存模型的交互。
显然,它无法在多 CPU 硬件上进行扩展。
在阅读了一些有关基于代理的建模和函数式编程/参与者模型的内容后,我正在考虑使用消息传递范例进行重写。
这个想法非常简单 - 每个对象都将是一个参与者,它们的交互将是消息,以便模拟可以并行发生。给定特定时间的对象配置 - 可以轻松计算其未来的后果。
问题是如何对时间建模:
例如,我们假设对象 X 的行为取决于 A 和 B,因为参与者和消息计算顺序无法保证,可能是当要计算 X 时,A 已经将其消息发送给 X 但 B 没有发送。
如何确保计算正确?
我希望问题很清楚
提前致谢。
您使用消息传递来并行化(离散事件?)模拟的方法是众所周知的,并且本身不需要函数式风格(当然,这并不妨碍您像那样实现它)。
您描述的基本问题事件发生的时间也被称为局部因果约束(例如,参见这本教科书 https://rads.stackoverflow.com/amzn/click/com/0471183830)。基本上,您需要使用同步协议确保每个对象(或代理)以正确的顺序处理其消息。在并行离散事件模拟领域,此类对象称为逻辑过程,并且它们通过事件(即带时间戳的消息)进行通信。
正确实现这些事件的同步协议是具有挑战性的并且协议的正确选择非常重要特定于应用的。例如,一个重要因素是每个事件所需的平均计算量:如果所需的计算量很少,则通信成本将主导整个执行时间,并且将很难扩展模拟。
因此我建议寻找现有的解决方案/库在从头开始之前,在您打算使用的参与者框架之上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)