我有一个关于 AVX_mm256_blend_pd
功能的问题。
我想优化我大量使用该_mm256_blendv_pd
功能的代码。不幸的是,这具有相当高的延迟和低吞吐量。此函数将三个__m256d
变量作为输入,其中最后一个变量表示用于从前 2 个变量中进行选择的掩码。
我发现了另一个函数 ( _mm256_blend_pd
),它采用位掩码而不是__m256d
变量作为掩码。当掩码是静态的时,我可以简单地传递一些东西,比如 0b0111
从第一个变量中获取第一个元素和第二个变量的最后 3 个元素。_mm_cmp_pd
但是在我的情况下,掩码是使用返回__m256d
变量的函数计算的。我发现我可以用来_mm256_movemask_pd
从掩码返回一个 int,但是当将它传递给函数时,_mm256_blend_pd
我得到一个错误error: the last argument must be a 4-bit immediate
。
有没有办法使用它的前 4 位传递这个整数?或者是否有另一个类似于 movemask 的功能可以让我使用_mm256_blend_pd
?或者我可以使用另一种方法来避免使用对这个用例更有效的 cmp、movemask 和 blend 吗?