使用SIMD是否有初始化成本



在SIMD子系统完全启动或全频率工作之前,是否有任何常用的消费类设备具有功率/频率上升周期?我们是用时钟周期还是微秒来测量失速?

相反,在SIMD性能丢失之前,通常可以执行多少个非SIMD指令,或者通过其他方式检测到这种情况?

我最感兴趣的是现代arm64 (Cortex-A53,55,75,77实现,M1)。

编辑

英特尔的情况似乎被合理地覆盖在降低CPU频率的SIMD指令中,这导致进一步的链接说明"硬转换"的最大8.5us周期,其中执行单元处于半状态(如果我理解正确的话)。这也与我的直觉相矛盾:使用AVX-512指令显然需要降低频率。

这个答案适用于pc,而不是ARM64。

在SIMD子系统启动或全频率工作之前,是否有任何常用的消费类设备具有功率/频率上升周期?

" no "表示开始。SSE被设计为x87 FPU的替代品。cpu永远不会关闭SIMD硬件,因为大多数程序偶尔会使用浮点运算。

然而,英特尔cpu关闭了一些硬件的电源。程序第一次使用32字节或64字节的向量时,它们的运行速度会慢得多,直到转换到适当的电源状态。

对于Intel Sandy Bridge, Ivy Bridge, Haswell,这个惩罚适用于32字节的向量。

对于Intel Skylake,该惩罚适用于32字节和64字节向量,预热时间为56000时钟周期或14 μs。

对于Intel冰湖和虎湖,惩罚只适用于64字节向量,预热时间大约是50000时钟周期。

在预热期间,吞吐量减半,指令有额外的延迟。注意,预热与指令集无关,它只适用于向量的大小。处理16字节矢量的AVX1, AVX2和AVX512指令总是以全速运行。

在SIMD性能丧失之前,通常可以执行多少条非SIMD指令

Skylake cpu在运行SIMD宽度≤16字节的指令花费270万个时钟周期(675 μs)后恢复到空闲状态。

有关更多信息,请参阅Agner Fog的微架构指南。

最新更新