首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VPERMILPS指令(_mm_permute_ps)的意义是什么?

VPERMILPS指令(_mm_permute_ps)的意义是什么?
EN

Stack Overflow用户
提问于 2019-01-13 12:12:11
回答 1查看 1.1K关注 0票数 14

AVX指令集引入了VPERMILPS,这似乎是SHUFPS的简化版本(对于两个输入寄存器都相同的情况)。

例如,以下指令:

代码语言:javascript
复制
c5 f0 c6 c1 00          vshufps xmm0,xmm1,xmm1,0x0

可替换为:

代码语言:javascript
复制
c4 e3 79 04 c1 00       vpermilps xmm0,xmm1,0x0

如您所见,VPERMILPS版本需要额外增加一个字节,并执行相同的操作。根据指令表,这两个指令占用一个CPU周期,具有相同的吞吐量。

引进这样的教学有什么意义?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-01-13 14:58:45

是的,使用vpermilps-immediate通常是一种漏掉的优化与vshufps (奈特的着陆除外),在相同的操作中浪费1字节的代码大小和相同的性能。

我认为vpermilps的要点是它可以使用矢量控制操作数。在AVX之前,唯一的可变控制洗牌是整数pshufb.

VPERMILPS ymm1, ymm2, ymm3/m256 -使用来自ymm1 3/m 256的控件在ymm2中使用单精度浮点值,并存储结果为ymm1。

当然,直接的形式有一个完全独立的操作码,你会问它为什么会存在。英特尔绝对可以只包括矢量版本,所以问题变成了“为什么他们包括即时版本?”--至少需要一些额外的解码硬件。洗牌单元已经有硬件以这种形式解压缩即时控制操作数,因为它与vshufps完全相同,所以可能实现起来很便宜吗?

对于即时vpermilps,您唯一不能用vshufps做的事情就是在一个指令中使用load+shuffle,就像vpermilps ymm0, [rdi], 0b00011011可以反转源的每个通道中的元素。但是就像大多数直接指令一样,它不能微融合内存操作数,所以它仍然是前端的2个融合域uop。(在AMD CPU上,它实际上节省了前端带宽。)尽管如此,它还是节省了代码大小与vmovups ymm0, [rdi] / vshufps ymm0,ymm0,ymm0, 0b00011011的对比。

除此之外,我看不出有什么意义。他们在两条128位车道上都做了相同的洗牌操作,对两条通道都重复使用了即时的4x2位字段。(而vpermilpdvshufpd都在各自的即时表中使用1位字段,并且可以在每条车道上进行不同的洗牌;上车道使用第2位和第3位;ZMM版本对上256个使用位4..7。因此,vpermilpd dst, src, immvshufpd dst, src,src, imm是相同的,除非您使用内存源,或者使用洗牌控制向量而不是直接。)

这让你怀疑英特尔是否忘记了VEX编码将使非破坏性vshufps为立即洗牌做同样的事情。

或者他们可能想到了他们的低功耗CPU,比如奈特的兰丁(Xeon ),在那里一个来源的洗牌比较便宜:。

vpermilps有一个周期的吞吐量,但是vshufpsvperm2f128有两个周期的吞吐量和一个额外的延迟周期。(据阿格纳福格(氏)指令表.)

因此,使用具有相同输入两次的vshufps是比较慢的。

但是在英特尔的大核心主流CPU上,是的,使用vpermilps-immediate是一种错过的优化,而不是vshufps,除非您可以将它与内存源一起使用。vshufps将需要相同的内存源两次,这显然是不可编码的。

AVX的设计比KNL早了很多年,但也许ISA的设计者们想到,也许未来的CPU可以通过更简单的洗牌来提高效率。

常规Silvermont ( KNL所基于的无序Atom )不支持AVX,但它具有1 uop /1周期吞吐量和shufps延迟。戈德蒙特的shufps吞吐量为0.5c。

AFAIK,英特尔仍然没有制造一个低功耗的核心(除了Xeon )与AVX。我不认为他们打算与特雷蒙特或Gracemont,戈德蒙特+的继任者。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54168726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档