如何在奔腾4处理器上运行时测量C算法所消耗的功率?

时间:2010-01-04 10:46:04

标签: c performance

如何在奔腾4处理器(以及任何其他处理器也可以)上运行时测量C算法所消耗的功率?

8 个答案:

答案 0 :(得分:6)

由于您知道执行时间,因此您可以通过查看P4 datasheet上的功耗来计算CPU使用的能量。例如,具有400 MHz FSB的2.2 GHz P4的典型Vcc为1.3725伏特,Icc为47.9安培,其为(1.3725 * 47.9 =)65.74瓦特。既然你知道你的10,000个算法循环的循环花了46.428570s,你假设一个循环需要46.428570 / 10000 = 0.00454278s。算法消耗的能量将为65.74瓦* 0.00454278s = 0.305瓦秒(或焦耳)。

转换为千瓦时:0.305瓦秒* 1000千瓦/瓦* 1小时/ 3600秒= 0.85千瓦时。一家公用事业公司收费约为每千瓦时0.11美元,所以这个算法的成本为0.85千瓦时* 0.11美元=约一分钱运行。

请记住,这只是CPU ......计算机的其余部分都没有。

答案 1 :(得分:5)

在机器上附加Kill-a-Watt的长循环中运行算法?

答案 2 :(得分:4)

优秀的问题;我赞成它。我没有线索,但这是一种方法论:

- 从英特尔(或AMD或其他任何人)获取CPU规格表或查看维基百科;这应该告诉你最大FLOP率的功耗;

- 将算法转换为FLOP;

- 做一些简单的算术;

- 将您的数据和计算发布到SO并邀请评论和更多数据

当然,你必须将下一篇文章作为另一个问题构建,我会感兴趣地观看。

答案 3 :(得分:4)

除非您在简单的单任务操作系统(如DOS或RTOS)上运行代码,您可以随时精确控制运行的内容,操作系统通常会同时运行许多其他进程。可能很难区分您的流程和其他流程。

答案 4 :(得分:2)

首先,您需要运行支持代码的最简单的操作系统(可能是某种服务器版本的unix,我希望这在Windows上不切实际)。这是为了避免操作系统搞乱您的测量结果。

然后,您需要在电源和主板之间使用敏感数据记录器对盒子进行检测。这需要一些仔细的硬件工程,以免弄乱PC电压调节,但有人必须这样做。

我实际上已经使用嵌入式MIPS盒和记录万用表完成了这项工作,但它只有一个12V电源。实际上,想想看,如果你使用的是专为在车辆中运行PC而设计的电源,那么你将需要一个12V供电,而你所需要的只是一个带有足够放大器的实验室PSU来运行它。

答案 5 :(得分:1)

很难说。

我建议您使用Current Clamp,这样您就可以测量CPU消耗的所有功率。然后,您应该测量系统的空闲消耗,以尽可能低的标准偏差获得标准值。

然后循环运行关键代码。

以前关于在DOS / RTOS下运行代码的建议也是有效的,但也许它的编译方式与生产相同...

答案 6 :(得分:1)

对不起,我发现这个问题毫无意义。

为什么?因为算法本身(与以下例外*)没有功耗相关,所以程序/线程/进程运行时的优先级。如果更改优先级,则会更改处理器的空闲时间,从而更改功耗。我认为指令之间能量消耗的唯一区别是所需的周期数,因此快速的代码将是功率友好的。 如果你不是指性能,那么测量“算法”的功耗是没有意义的。

*异常:在等待其他线程时可以空闲的线程,即使用HLT指令的程序。

确保尽可能快地运行处理器可以超线性地增加能量 (需要更多的热量,更多的冷却),但这是一个硬件问题。如果你想节省能源,你可以降低处理器的频率或使用高能效的处理器(Atom处理器),但更改/调整代码不会改变任何东西。

因此,我认为向处理器生产商询问规格存在哪些不同的处理器模式以及它们具有哪些能耗更为有意义。您还需要知道系统周边(风扇,电源,图形卡(!))和正在运行的软件会影响计算机电源的测量结果。

为什么你还需要这个任务?

答案 7 :(得分:1)

嘿伙计们感谢回复....代码是一个非常简单的C代码(甚至不是150行)所以我想我们可以在DOS下轻松运行它....我需要为我的大学项目做这个他们坚持不使用任何外部设备或电路...没有任何方法可以逻辑地做到这一点..只需使用一些操作系统命令或其他类似的东西.....我循环我的代码为10000时间和所需的时钟滴答数是845,所需的时间是46.428570 ...我们不能对这些值进行一些操作,并对消耗的功率有一个公平的想法.....如果你想我可以上传整个代码