限制模拟cpu速度的方法

S E*_*S E 5 java optimization emulation

我正在编写一个MOS 6502处理器仿真器,作为我业余时间进行的一个大型项目的一部分.模拟器是用Java编写的,在你说之前,我知道它不会像用c或汇编语言那样高效和优化,但目标是使它在各种平台上运行并拉动2.5MHZ在1GHZ处理器上,这对于解释型仿真器非常有用.我的问题恰恰相反,我需要将周期数限制为1MHZ.我环顾四周,但没有看到很多这样做的策略.我尝试了一些事情,包括检查一些周期后的时间和睡眠预期时间与实际时间之间的差异,但检查时间会使仿真速度减慢8倍,所以有人有任何更好的建议或也许在Java中优化时间轮询以减少减速的方法?

Nei*_*fey 2

使用 sleep() 的问题是,您通常只能获得 1ms 的粒度,并且您获得的实际睡眠不一定精确到最接近的 1ms,因为它取决于系统的其余部分正在做什么。一些可以尝试的建议(我突然想到的——我实际上并没有用 Java 编写过 CPU 模拟器):

  • 坚持你的想法,但要检查大量模拟指令之间的时间(无论如何,执行都会有点“不稳定”,特别是在单处理器机器上,因为操作系统可能会从你的线程中夺走 CPU 数个时间)一次毫秒);

  • 因为你想以每毫秒 1000 条模拟指令的顺序执行,你也可以尝试在“指令”之间挂在 CPU 上:让你的程序通过反复试验定期计算出它需要运行多少次循环在指令之间“浪费”足够的 CPU,使计时结果平均达到每秒 100 万条模拟指令(您可能想看看将线程设置为低优先级是否有助于在这种情况下提高系统性能)。

  • JIT 编译器可能会优化掉任何 NOP 字节码。 (2认同)