如何以编程方式模拟较低的处理器频率?

ytr*_*trp 7 c simulation cpu x86 assembly

我有兴趣在我的2GHz +处理器上以特定频率(如25MHz)运行程序.我可以想到做这样的事情的唯一方法是使用微秒精度睡眠函数,但我不确定如何计算线程应该睡多长时间以匹配特定频率.任何提示或其他想法?我在X86 Linux操作系统上用C语言做这个.

Joh*_*ler 2

这里有几个问题。这是您想要模拟的第一个内容。现代处理器的时钟频率为 2Ghz,但指令采用流水线方式,因此单个指令可能需要 10-30 个时钟才能完成。通过在线程中放置睡眠,您会破坏管道。第二个是你想要模拟的粒度。您是否需要具有指令级时序,我们可以通过在函数之间放置一些空间来伪造它吗?

我的最后一个想法是,您可能不想模拟以 25Mhz 运行的现代处理器,而是模拟嵌入式设备上的某种类型的 ARM 芯片。如果是这种情况,市场上已经有针对大多数此类芯片的非常好的模拟器。将代码编译为目标芯片的本机指令,它们使用现有的模拟器(如果可用)。


编辑:

据我现在的理解,您希望每秒在虚拟处理器上执行 25M 次指令。我可能会尝试一种适应性方法。你有很多时间在指令之间“搞乱”。首先在每条指令之间放置一些间距,睡眠可能会起作用。请注意,在数组中,当每个虚拟时钟启动时,要尽可能精确地保持最近 25、100 或 1000 个周期的滚动平均值。如果平均值上升到 25Mhz 以上,则开始添加更多空间。如果太慢则减少空间。

正如我最初所说,计算一条指令在现代处理器上花费的时间是非常困难的。第一组指令可能运行得有点太快或太慢,但是像这样的技术应该使其尽可能接近正确的速度,就像类似硬件实现上的典型振荡器一样。

  • 这样的回答是没有帮助的。作者问的是如何购买预先存在的软件,而不是在哪里购买。 (2认同)