我编写了以下方法来置换4x双AVX寄存器__m256d
的内容:
template <std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3>
auto permute(const __m256d& r) const
{
return _mm256_permute4x64_pd(r, (I3 << 6) | (I2 << 4) | (I1 << 2) | I0);
}
这使用AVX2指令_mm256_permute4x64_pd
。是否可以编写一个只使用AVX指令执行相同操作的方法?
我知道一种方法是将方法专门化16次并手动编码各种组合(我可以在没有帮助的情况下完成),但只是想知道是否有一种合理的最佳和聪明的方法来在一个方法中使用I0...I3
。