如何将 8 个打包的 32 位整数(在 __m256i 中)的 +-1 符号打包为 64 位整数的字节?

2024-01-18

给定一个__m256i打包 32 位有符号整数的价值,如何获取每个字节所在的单个 64 位数字1如果原始的相应 32 位有符号整数__m256i大于或等于0,并得到-1如果该 32 位整数是负数?

AVX2(可能还有 AVX512)很有趣。


这是另一种方法。

它需要 BMI2 支持 PDEP 指令,仅在 Intel 上快速,而 AMD 从 Zen 3 微架构开始。

// Convert sign bits of 8 int32 lanes into -1 / +1 bytes
uint64_t packSigns( __m256i vec )
{
    // Bitcast to FP32 vector, compiles into no instructions
    __m256 fv = _mm256_castsi256_ps( vec );
    // Move sign bits to general-purpose register
    uint64_t bits = (uint32_t)_mm256_movemask_ps( fv );
    // Expand bits into bytes
    constexpr uint64_t lowBits = 0x0101010101010101ull;
    bits = _pdep_u64( bits, lowBits );
    // Convert 0 / +1 bytes into +1 / -1 bytes
    return ( bits * 0xFF ) | lowBits;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 8 个打包的 32 位整数(在 __m256i 中)的 +-1 符号打包为 64 位整数的字节? 的相关文章

随机推荐

  • Objective-C 访问数组

    我已完成以下尝试创建 2d 和 3d 数组 Array1 NSMutableArray alloc init Array2 NSMutableArray alloc init Array3 NSMutableArray alloc init
  • Rails:获取当前请求的控制器和操作

    在我的 Rails 应用程序中 我使用在views layouts application html erb中 奇怪的是 价值观params controller and params action 始终滞后 1 个请求如果它位于开口上方的
  • 如何为 PL/SQL 块的表达式中的变量赋值?

    当我运行此脚本时 它在该语句中返回错误no1 no1 no2 no2 no1 declare no1 number 3 31 no2 number 3 34 begin dbms output put line Before swap db
  • 如何使用 python 代码从给定的 url 获取 youtube 标题和描述?

    如何从给定 url 的 python 代码中获取 YouTube 标题和描述 是否需要使用youtube API 我正在编写一个程序 需要从给定的网址查找生成标题和描述 它不是必要的 但它可能比您自己编写要快得多且容易得多 有关更多信息 请
  • DevExtreme 和 Aurelia 集成

    DevExtreme 支持角度指令 如图所示 我如何才能通过 Aurelia 实现同样的目标 显示集成的示例 https www youtube com watch v iIZj6hOFg0o https www youtube com w
  • 重写 Rails 中的 getter/setter,同时保留 Model.new({attrib: 'blah'}) 格式

    如果我重写模型中的 getter 和 setter 那么在控制器中为该属性创建默认初始值的最佳方法是什么 例如 当我在控制器中创建模型的新实例以包含一些初始值时 表单中的预填充值显示来自 setter 而不是 getter 的输出 这应该怎
  • 在媒体窗口中选择图片后添加/更新自定义字段 (Wordpress)

    我有一个关于 WordPress 的问题 我刚刚在添加 编辑帖子页面中添加了一个名为 添加滑块 的按钮 这是我的 function php 中的代码 Add button to create slider add action media
  • 求值器中的表达式非法(&访问冲突)

    我试图通过使用类 Tbb2uc 来处理纯文本文件 加载到 StringList 中 但在调用函数 GetAddress 时获取 AV TArrayQuotePositions array 1 4 of integer Tbb2uc clas
  • 将 CSV 直接下载到 Python CSV 解析器中

    我正在尝试从 Morningstar 下载 CSV 内容 然后解析其内容 如果我将 HTTP 内容直接注入 Python 的 CSV 解析器 结果的格式不正确 然而 如果我将 HTTP 内容保存到文件 tmp tmp csv 然后将该文件导
  • 如何从 MailItem 获取特定于任务的属性

    我一直在为自己做一个周末小项目 其中包括从 Outlook 获取所有 ToDo 任务 将它们放入 DataGridView 中 然后我就能够编辑和导出它们 我遇到的唯一问题是 当标记的电子邮件仍然存在时 我无法获取它们的任务特定属性 我只是
  • 声明 std::string 变量后,Cout 没有输出

    我编写了一个简单的程序 返回作为参数传递的 IP 地址的主机名 该程序使用两个函数 getaddrinfo 和 getnameinfo 我正在使用 Linux Mint Netbeans IDE 和 G 编译器 输出没问题 没有错误 但是当
  • 阿拉伯字符“??????”关于 php 和 mysql [重复]

    这个问题在这里已经有答案了 这是我的问题 我有一个阿拉伯数据库 mysqli UTF8 general ci 并且我的 php 文件的字符集是 UTF 8 当我出售数据时 我得到 在 php 上 我的管理员我可以毫无问题地写入和读取 在 p
  • Django 模型主键作为一对

    我正在尝试制作一个应用程序 用户可以登录他们的个人资料并将歌曲添加到他们最喜欢的列表中 我为此定义了 M2M 关系 我的问题是如何说 歌曲 歌手 的组合是独特的 我搜索了一下 发现通过unique together也许可以 这是设置的正确方
  • 使用 LEFT JOIN 删除

    我想根据引用第一个表的另一个表中存在的数据从表中删除 但是 当我将其作为 SELECT stetement 运行时 我有有效的代码并显示要删除的值 但是当我将其更改为删除它给了我错误 我不明白它们为什么在那里 DELETE leadCust
  • 如何使用facet_wrap在每个方面具有不同数字的离散类别之间创建相等的距离

    我的目标是使图中所有国家之间的距离大致相等 例如 在第一类中 Increase 国家分散 另一方面 第二类和第三类国家彼此距离太近 这迫使我减小国家文本的大小 例如 IS UK 和绘制的估计值 例如 1 5 1 2 因此 一旦我将此文件提取
  • GCE Kubernetes 会话持久化

    我正在 GCE Kubernetes 上运行一个 wordpress woocommerce 网站 但由于会话持久性而在扩展时遇到问题 LoadBalancer GCE Ingress 将所有流量发送到反向代理 然后反向代理将流量发送到我设
  • 在 Scala 中将列表[Try[A]] 转换为列表[A]

    我想从输入数据中过滤掉错误的输入 我目前正在使用scala util Try包装任何异常 下面是一个简单的例子 其中 3I 抛出一个NumberFormatException 我想知道在 Scala 中是否有更好的方法来做到这一点 val
  • OpenGL 和 QtQuick 纹理问题

    我正在基于 Qt 附带的 openglunderqml 示例在 C 中开发一个简单的 QQuickItem 实现 我做了一些修改以使用不同的着色器和加载的两个纹理 这个想法是着色器将在两个纹理之间交叉淡入淡出 本质上只是我加载到纹理中的图像
  • Flutter Web:堆栈和耀斑问题

    我试图在 Flutter Web 开发频道 v1 13 2 上创建一个简单的网页 但出现了这个奇怪的问题 当我尝试在堆栈小部件中放置耀斑动画时 该堆栈小部件分别有 2 个附加小部件 一个背景和一个居中文本 耀斑似乎没有出现 但是当我移除背景
  • 如何将 8 个打包的 32 位整数(在 __m256i 中)的 +-1 符号打包为 64 位整数的字节?

    给定一个 m256i打包 32 位有符号整数的价值 如何获取每个字节所在的单个 64 位数字1如果原始的相应 32 位有符号整数 m256i大于或等于0 并得到 1如果该 32 位整数是负数 AVX2 可能还有 AVX512 很有趣 这是另