作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望VC++发出如下代码:
vpxor ymm0, ymm0, ymm0
vmovdqa xmm0, xmm7
__m256i
值,其中最低16个字节来自另一个变量,而最高16个字节为零。相当于
_mm256_castsi128_si256
内部函数,只需要高128位为零即可,而不是未定义。
_mm256_setr_m128i( low, _mm_setzero_si128() )
_mm256_insertf128_si256( _mm256_setzero_si256(), low, 0 )
vinsertf128
,相对较慢,延迟3-4个周期,比
vmovdqa
慢得多。 VC++ 2017有任何解决方法吗?
最佳答案
首先,您不需要vpxor ymm0, ymm0, ymm0
,因为vmovdqa xmm0, xmm7
已经将目标ymm
/ zmm
寄存器的高位清零了。这与传统的movdqa
指令不同,该指令无论如何都不应该在AVX代码中使用。
其次,特定指令的选择是编译器的责任。如果您的编译器生成效率低下的代码,请考虑将错误报告给编译器供应商。例如,gcc识别这种内在模式并生成optimal code。
对于MSVC,由于不支持x86-64模式下的内联汇编程序,因此没有可靠的方法来确保特定的指令,除非使用单独编译的汇编程序源。您可能会发现一些内部函数的组合,这些内部函数会生成所需的代码,但是这些函数是不可靠的(可能会调用未定义的行为),并且可能会从一个编译器版本更改为另一个编译器版本。
关于c++ - 如何在将高位设置为零的同时将__m128i转换为__m256i?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60074111/
在 javascript 中是否有一种简单的方法来只转义特定范围的控制字符? 具体来说,我只想转义范围“\x00-\x1f”和“\x7f-\xff”(控制和高位字符)。在计算然后发送到 API 的散列
我是一名优秀的程序员,十分优秀!