1

私は ecatmur のconstexpr swap()関数について考えてきましたが、それはより一般的な関数の特殊なケースだと思いshuffle()ます:

template <std::size_t ...I, std::size_t ...J, typename T>
constexpr T shuffle(T const i, std::index_sequence<J...>) noexcept
{
  return ((std::uint8_t(i >> 8 * I) << 8 * J) | ...);
}

Iはソース インデックスでありJ、宛先インデックスです。実装にはさまざまな方法がありますshuffle()(詳細は省きます) が、私の経験ではshuffle()、ループ内で呼び出すと、実装によって gcc と clang が SIMD コードを同じように生成されません。したがって、私の質問です。shuffle()おそらく組み込み関数または組み込み関数を使用して、clang と gcc が既存のものよりも SIMD 化するのが好きなの定式化は存在しますか? 特定の命令セットを目指しているわけではありません。

4

0 に答える 0