在模拟中同步两个核心的方法[关闭]

问题描述 投票:0回答:2

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

multithreading caching simulator processor cpu-cores
2个回答
1
投票

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

使用这种技术,您可以为每个“参与者”线程(最坏的情况)构建一个状态机(请参阅

此处),并且不用担心互斥体/条件。一旦你有了这个基础,你就能够处理中流出现的情况(例如“我忘记了这个细节......不用担心,只需在此处添加一个状态......不必重新-洗牌我的互斥体)。

此外,由于进行模拟都是关于“虚拟时间”(因为你无法实时运行!),因此拥有基于“虚拟时钟”的基础架构可以将问题抽象到适当的级别。


0
投票
您可以有一个时钟线程加 N 个处理器线程。时钟线程可以显式调用每个处理器线程以执行 1 个处理步骤。每个处理器线程都会从时钟线程获得对

doStep()

 的调用;它迈出一步,然后将控制权返回给时钟线程。

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

© www.soinside.com 2019 - 2024. All rights reserved.