首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVX2中的条件指令

AVX2中的条件指令
EN

Stack Overflow用户
提问于 2017-08-23 18:12:03
回答 2查看 851关注 0票数 1

您能给出AVX2中可用的条件指令列表吗?到目前为止,我发现了以下几点:

  • _mm256_blendv_*用于从ab中选择基于掩码的c

有条件乘法和条件加法之类的吗?

另外,如果指令进行imm8计数(如_mm256_blend_*),那么在向量比较之后,您能解释如何得到imm8吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-24 20:08:50

AVX512为几乎所有指令引入了可选的零掩蔽和合并掩蔽。

在此之前,若要执行条件添加,请在添加之前屏蔽一个操作数( vandpsvandnps作为逆操作)(而不是结果的vblendvps )。这就是为什么包装比较指令/本质产生全零或全一元素的原因。

0.0是一个可加性的标识元素,所以添加它是一个没有操作的元素。(除了IEEE的-0.0和+0.0的语义外,我忘记了它是如何工作的)。

屏蔽常量输入,而不是混合结果,可以避免使关键路径变长,比如有条件地添加1.0

条件乘法更麻烦,因为0.0不是乘法标识。您需要被1.0乘以才能保持值不变,并且很难用and或AND与比较结果生成这个值。您可以混合输入,也可以执行乘法和混合输出。

代替blendv的方法是至少有3个布尔人,比如和/ANDN/OR,但这通常不值得。尽管注意到Haswell将vblendvpsvpblendvb作为端口5的2 uop运行,但与在任何端口上运行的整数布尔相比,这是一个潜在的瓶颈。Skylake将它们作为任何端口的2 uop运行vblendvps。不过,做点什么来避免在关键的道路上出现混乱是有道理的。

掩蔽输入操作数或混合结果通常是做无分支SIMD条件的方法。

BLENDV通常至少有2 uop,所以它比an和和慢。

即时混合的效率要高得多,但您不能使用它们,因为imm8 混合控件必须是嵌入到指令机器代码中的编译时常量。在汇编语言环境中,这就是即时的意思。

票数 2
EN

Stack Overflow用户

发布于 2017-08-23 18:43:10

英特尔Intrinsics指南建议收集,加载和存储操作的掩码。除非自修改代码或跳转表被认为是一种选项,否则blend_epi16中的即时blend_epi16不是可编程的。仍然有可能从BMI2中使用pext来压缩半个奇数位--从AVX2中的movemask获得32个独立的掩码位,但是blend_epi16使用每个位来控制四个字节--或者每个组中的一个16位变量。

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

https://stackoverflow.com/questions/45846735

复制
相关文章

相似问题

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