【发布时间】:2013-11-12 10:17:33
【问题描述】:
很简单的问题,可能很难回答:
使用 SSE 指令(例如并行求和/最小/最大/平均操作)是否比执行任何其他指令(例如单个求和)消耗更多功率?
例如,在Wikipedia 上我找不到这方面的任何信息。
我能找到的唯一答案提示是here,但它有点笼统,在这方面没有参考任何已发表的材料。
【问题讨论】:
-
我认为,如果您设法使 CPU 保持最大忙,它需要更多的功率。但这比 SSE 与标量更棘手。有几个 SSE 单元可以同时保持忙碌,您的代码不应该在内存访问等上等待太多。如果您使用标量/SIMD 指令执行相同数量的工作,SIMD 指令可能会更快,减少总能耗。
-
这实际上取决于代码的优化程度 - 高度优化的代码使更多的执行单元保持忙碌并花费更少的时间等待例如负载停止,因此需要更多的功率。在运行相对于普通标量代码进行高度优化的 SIMD 代码时,我发现功耗(和 CPU 温度!)大幅增加。
-
@CodesInChaos,我怀疑标量/SIMD 的工作量是否相同。 SIMD 使用更多的晶体管来更快地并行工作。速度提高四倍可能会使用四倍以上的功率。 SIMD 也有可能共享一些并行计算的逻辑,并且比 x87 逻辑更优化,因此它使用更少的功率。但这是一个单独的点。
-
我很惊讶没有一个答案提到 race to sleep 的概念:快速完成计算,这样您就可以在低功耗空闲状态下花费更多时间。与具有大量分支错误预测和缓存未命中的代码与使 256b FMA 单元饱和的代码之间的差异相比,低功耗空闲可以节省更多的电量。每个时钟周期切换的晶体管越多,CPU 使用的功率就越大。这么大的事情Haswell Xeons have a lower max clock speed when AVX code is active.
标签: performance x86 sse cpu-architecture energy