这些指令会消耗更多的能量/能量吗?

Ant*_*nio 11 performance x86 sse energy cpu-architecture

很简单的问题,可能很难回答:

使用SSE指令(例如并行和/最小/最大/平均操作)是否比执行任何其他指令(例如单个总和)消耗更多功率?

例如,在维基百科上,我找不到这方面的任何信息.

我能找到的答案的唯一提示就在这里,但它有点通用,并且没有提及这方面的任何出版材料.

Mys*_*ial 29

几年前我实际上对此进行了一项研究.答案取决于您的问题究竟是什么:

在今天的处理器中,功耗并不是由指令类型(标量与SIMD)决定的,而是其他所有因素,例如:

  1. 内存/缓存
  2. 指令解码
  3. OOE,注册文件
  4. 还有很多其他人.

所以如果问题是:

所有其他条件相同:SIMD指令是否比标量指令消耗更多功率.

为此,我敢说是的.

我的一个研究生院项目最终成为了这个答案:SSE2(双向SIMD)和AVX(4路SIMD)的并排比较确实表明AVX具有明显更高的功耗和更高的处理器温度.(虽然我不记得确切的数字.)

这是因为SSE和AVX之间的代码是相同的.只有指令的宽度不同.AVX版本确实使工作量增加了一倍.

但如果问题是:

将矢量化我的代码以使用SIMD会比标量实现消耗更多功率.

这里涉及众多因素,所以我将避免直接回答:

降低功耗的因素:

  • 我们需要记住,SIMD的目的是提高性能.如果您可以提高性能,您的应用程序将花费更少的时间来运行,从而节省您的能力.

  • 根据应用程序和实现,SIMD将减少执行特定任务所需的指令数量.那是因为你在每条指令上做了几次操作.

增加功耗的因素:

  • 如前所述,SIMD指令可以完成更多工作,并且可以使用比标量等效更多的功能.
  • SIMD的使用引入了标量代码中不存在的开销(例如shuffle和permute指令).这些还需要通过指令执行管道.

打破它:

  • 更少的指令 - >发出和执行它们的开销更少 - >更少的功率
  • 更快的代码 - >运行更少的时间 - >更少的功率
  • SIMD需要更多的电力来执行 - >更多的电力

因此,SIMD可让您的应用花费更少的时间,从而为您节省电量.但在运行时,每单位时间消耗的能量更多.谁获胜取决于具体情况.

根据我的经验,对于从SIMD(或任何其他方法)获得有价值的加速的应用程序,前者通常会获胜并且功耗会下降.

这是因为运行时间往往是现代PC(笔记本电脑,台式机,服务器)功耗的主要因素.原因在于大部分功耗不在CPU中,而在于其他所有功能:主板,内存,硬盘,显示器,空闲视频卡等......其中大部分都具有相对固定的功耗.

对于我的计算机,只需保持它(空闲)已经吸取了一半以上的全核SIMD负载(例如prime95或Linpack).因此,如果我可以通过SIMD /并行化使应用程序速度提高2倍,那么我几乎肯定能够节省电力.


Ste*_*non 6

作为神秘的回答表明,SIMD代码往往采取稍微更多权力,但如果问题是经得起量化,写得很好的SIMD代码运行显著快; 加速比是几乎总是比功率增加,这导致较大的减少的能量消耗的量(功率随时间的积分).

这不仅适用于SIMD矢量化,而且几乎适用于所有优化.更快的代码不仅更快,而且(几乎普遍)更节能.

关于术语的一个例子:当人们真正想要谈论"能量" 时,他们经常谈论"权力".如果您正在设计电源(显而易见的原因)或工程机箱(因为您想知道需要多少功率才能分散为热量),计算中的功耗实际上才是相关的.99.999%的人没有参与其中任何一项活动,因此他们确实想要记住能量(因为计算/能量是衡量项目效率的正确方法).

  • 正如您所说,FLOP/S/Watt 中的时间项取消,留给您的是计算/能量。FLOP/S/Watt 被如此广泛地引用是不幸的,也有点令人困惑;Ops/Joule 是一种更好(但很少使用)的方法来命名相同的单位。 (2认同)
  • @mctylr:废热以焦耳为单位。废热传递的瞬时速率以瓦特为单位。效率的正确衡量标准是“执行固定计算需要多少能量”。与预期相反,由于静态功耗考虑,这有利于*更快*地完成计算。算盘没有赢。 (2认同)