【发布时间】:2019-10-09 22:06:03
【问题描述】:
如何通过 unsigned char 变量中的位屏蔽 __m256 变量中的 8 个浮点数? (它们的值在编译过程中是未知的)
__m256 flts = _mm256_set1_ps(5.0f);
unsigned char = 0b10010111;//just for example, but can be any value during runtime
所需的输出将有 flts 包含 5、0、0、5、0、5、5、5
Intel Intrinsics Guide有没有有效的说明?
处理器仅支持最高 AVX 的指令(但不支持 AVX2 或更高版本)
【问题讨论】:
-
要在运行时屏蔽,您需要将值加载到寄存器中,然后使用您制作的屏蔽对它们执行屏蔽操作(例如“与”操作)。您将无法修改 CPU 在运行时执行的实际指令。
-
你有 AVX512F 和 AVX512VL 吗?
-
@walter,不,只有带有
m256的AVX -
用内在函数版本更新了我对链接副本的回答。它比
setr答案更有效,这里给出了标量位测试。显然用它来获取掩码并使用_mm256_and_ps申请,因为0.0 & anything是0.0,即普通SIMD 掩码。
标签: c++ sse intrinsics avx