在具有固定(较低) CPU时钟速度的Linux环境中运行特定程序(例如,获得该时钟速度的runat 400mhz ./my-program --argument-of="my program" )将是非常有用的。
我需要它在我的程序的每个组装指令之间生成延迟,如果延迟不精确(例如,如果它依赖于操作系统调度器,它几乎可以肯定),它不会杀死我。
其目标是使算法效率在学校编程时非常显着(拥有3 3GHz的CPU,很难注意到运行时间较短且可以真正优化的慢算法)。此外,它可能是有用的,在实时发现比赛条件,也许。
你知道有这样的工具吗?有什么我可以破解的翻译来达到这个目的吗?gdb能以一种相对简单的方式帮助我吗?我认为这是我所知道的最接近控制Linux程序执行的事情。
在CPU上限VM中运行漏洞系统可能是另一种选择,因为它给我提供了一种错觉--一个较低速度的CPU --但是或者最好运行单个程序。
发布于 2013-10-17 00:28:44
您可能可以设置处理器的时钟,但在全球范围内,不是为特定的程序。处理器不是这样工作的。用于电力受限环境(特别是笔记本电脑和其他移动设备)的处理器倾向于支持多种速度。
原则上,您可以安排在调度进程时更改处理器速度(如果支持的话),并在调度另一个进程时重置处理器速度。我不知道有任何软件支持这一点,这可能需要对内核进行相当大的修改。
您可以在一个缓慢的虚拟机中运行您的程序,比如Qemu (没有KVM,所以您可以获得纯软件仿真)或Bochs。
以较低的CPU速度运行不太可能暴露更多的竞争条件。
如果您的程序是多线程的,您可以强制它使用单处理器或带有taskset的特定处理器集,例如,taskset 3 myprogram只能在CPU #0和#1上运行。强迫程序在单个CPU上运行可能会出现较少的竞争条件。
对于用例,与其运行较慢的程序,不如运行几次。例如,如果您希望程序在比计算机慢10倍的设备上具有一定的速度,则通过连续运行10次程序来测试它。多次运行程序会增加进入竞争条件的可能性。
发布于 2013-10-17 01:46:48
另一种选择是使用一种慢速硬件--某种廉价的基于手臂的板,比如Raspbery或(稍微更强大的) Compulab Trimslice。他们有有限的内存,缓慢的CPU,但可以运行一个完整的Linux系统- Fedora,Debian和其他几个发行版有ARM版本。
发布于 2013-10-17 00:23:19
其目标是使算法效率在编程时非常显着,而不是那么重的应用程序。
这样做的规范方法是多次重复这一过程。如果您有两个不同的算法来执行相同的(不那么繁重的)任务X,并且您希望对它们进行基准测试,那么您需要花时间重复任务X一千次或一百万次。这可能需要您编写一个简单的(高级)程序来驱动基准测试;只要同一个驱动程序运行所有测试,您就会得到一个与另一个测试速度的实际比较。
https://unix.stackexchange.com/questions/96387
复制相似问题