Ant*_*nio 11 performance x86 sse energy cpu-architecture
很简单的问题,可能很难回答:
使用SSE指令(例如并行和/最小/最大/平均操作)是否比执行任何其他指令(例如单个总和)消耗更多功率?
例如,在维基百科上,我找不到这方面的任何信息.
我能找到的答案的唯一提示就在这里,但它有点通用,并且没有提及这方面的任何出版材料.
Mys*_*ial 29
几年前我实际上对此进行了一项研究.答案取决于您的问题究竟是什么:
在今天的处理器中,功耗并不是由指令类型(标量与SIMD)决定的,而是其他所有因素,例如:
所以如果问题是:
所有其他条件相同:SIMD指令是否比标量指令消耗更多功率.
为此,我敢说是的.
我的一个研究生院项目最终成为了这个答案:SSE2(双向SIMD)和AVX(4路SIMD)的并排比较确实表明AVX具有明显更高的功耗和更高的处理器温度.(虽然我不记得确切的数字.)
这是因为SSE和AVX之间的代码是相同的.只有指令的宽度不同.AVX版本确实使工作量增加了一倍.
但如果问题是:
将矢量化我的代码以使用SIMD会比标量实现消耗更多功率.
这里涉及众多因素,所以我将避免直接回答:
降低功耗的因素:
我们需要记住,SIMD的目的是提高性能.如果您可以提高性能,您的应用程序将花费更少的时间来运行,从而节省您的能力.
根据应用程序和实现,SIMD将减少执行特定任务所需的指令数量.那是因为你在每条指令上做了几次操作.
增加功耗的因素:
打破它:
因此,SIMD可让您的应用花费更少的时间,从而为您节省电量.但在运行时,每单位时间消耗的能量更多.谁获胜取决于具体情况.
根据我的经验,对于从SIMD(或任何其他方法)获得有价值的加速的应用程序,前者通常会获胜并且功耗会下降.
这是因为运行时间往往是现代PC(笔记本电脑,台式机,服务器)功耗的主要因素.原因在于大部分功耗不在CPU中,而在于其他所有功能:主板,内存,硬盘,显示器,空闲视频卡等......其中大部分都具有相对固定的功耗.
对于我的计算机,只需保持它(空闲)已经吸取了一半以上的全核SIMD负载(例如prime95或Linpack).因此,如果我可以通过SIMD /并行化使应用程序速度提高2倍,那么我几乎肯定能够节省电力.
作为神秘的回答表明,SIMD代码往往采取稍微更多权力,但如果问题是经得起量化,写得很好的SIMD代码运行显著快; 加速比是几乎总是比功率增加,这导致较大的减少的能量消耗的量(功率随时间的积分).
这不仅适用于SIMD矢量化,而且几乎适用于所有优化.更快的代码不仅更快,而且(几乎普遍)更节能.
关于术语的一个例子:当人们真正想要谈论"能量" 时,他们经常谈论"权力".如果您正在设计电源(显而易见的原因)或工程机箱(因为您想知道需要多少功率才能分散为热量),计算中的功耗实际上才是相关的.99.999%的人没有参与其中任何一项活动,因此他们确实想要记住能量(因为计算/能量是衡量项目效率的正确方法).