c++ - shuffle() 函数和 SIMD 代码生成
问题描述
我一直在考虑 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()
调用时,实现不会诱导 gcc 和 clang 生成同样好的 SIMD 代码。shuffle()
因此我的问题。是否存在一种公式shuffle()
,clang 和 gcc 比现有的更喜欢 SIMDify,可能使用内置函数或内在函数?我不是针对特定的指令集。
解决方案
推荐阅读
- javascript - 仅从另一个对象更新一个对象并保持其余参数相同
- javascript - 如何使用递归编写一个函数,该函数接受 2 个整数并返回一个包含 2 个输入整数之间的整数的数组
- laravel - select2 未显示 livewire 组件中的选项
- java - 显示金字塔
- pdf - 呈现为 pdf 的 Visualforce 页面可以使用 Docusign 发送给 Esign
- c# - 有没有办法以链接格式从根目录一次获取所有文件以使用图形 api 进行查看?
- postgresql - 如何安全地向数据库添加新货币操作?
- c# - 注册数据未显示在 ASP.NET 项目的数据库中
- javascript - Nuxt:如何在应用初始化时加载数据以存储
- c - 使用 Parson 库创建一个 json 数组?