我正在尝试设计然后编写一个可以增加/减少CPU使用率的java程序。这是我的基本想法:编写一个多线程程序。并且每个线程都进行浮点计算。通过添加/减少线程来增加/减少cpu使用量。
我不确定在这个测试用例中哪种浮点运算最好。特别是,我将测试VMWare虚拟机。
答案 0 :(得分:0)
你可以总结一下自然数的倒数。由于此总和不会收敛,编译器将不敢将其优化。只需确保结果最终以某种方式使用。
1/1 + 1/2 + 1/3 + 1/4 + 1/5 ...
这当然会占用浮点单元,但不一定是中央处理单元。因此,如果这种方法好或不是你应该提出的主要问题。
答案 1 :(得分:0)
简单的繁忙循环会增加CPU使用率 - 我不知道进行FP计算是否会显着改变这一点,或者能够实现更一致的负载因子,即使它确实运行FPU而不仅仅是ALU
虽然creating a similar proof-of-concept in C#我使用固定数量的线程并更改了每个线程的睡眠/字持续时间。请记住,此过程并不精确,并且受CPU和过程限制以及现代抢占式操作系统的其他因素的影响。将VMware添加到混合中也可能会使观察到的行为更加复杂。在退化情况下,可以在用于调整负载的代码和系统报告的负载之间形成谐波。
如果使用较低级别的构造(通常需要“内核模式”访问),则可以实现更一致的节流 - 部分原因是能够避免某些[线程]抢占: - )
使用适当的硬件可以查看的另一个替代方案是设置CPU时钟然后以100%运行。目前的英特尔酷睿i系列芯片非常灵活(可以在整个范围内谨慎设置CPU倍频),尽管从Java访问可能会有问题。这可以在主机上完成,当然不是VMware。
快乐的编码。