在模拟中同步两个核心的方法

时间:2009-12-09 13:28:36

标签: caching multithreading core simulator processor

我必须在C中构建一个双核处理器模拟器(它实际上是一个多级内存模拟,缓存L1 / L2,块替换等)。事实上,我很难找到一种同步核心的方法(我正在编程为线程)。我有什么想法可以做全球时钟吗?我应该从线程更改为子进程吗? 提前致谢

2 个答案:

答案 0 :(得分:1)

这里有很多选项:由于您可能最终支持与多个线程的复杂交互,因此您可能需要考虑使用带有“总线”消息的“虚拟时钟”。这样,您将有更多时间专注于核心功能,而不是调试同步逻辑......

使用这种技术,您可以为每个“actor”线程构建一个状态机(参见 here )(最糟糕的情况)并且不用担心互斥/条件。一旦你有了这个基础,你将能够处理出现在中游的案例(例如“我忘了这个细节......不用担心,只需在这里添加一个州......不必重新 - 改变我的互斥体。)

此外,由于模拟完全是关于“虚拟时间”(因为您无法实时运行!),因此基于“虚拟时钟”的基础架构将问题抽象到适当的水平。

答案 1 :(得分:0)

你可以有一个时钟线程加上N个处理器线程。时钟线程可以显式地调用每个处理器线程以进行1个处理步骤。每个处理器线程从时钟线程调用doStep();它做了一步,然后将控制权返回给时钟线程。

您还可以随机调整处理器线程的调用顺序,以便您更有可能捕获客户端代码中的错误。