从 __m128i 中查找最小/最大值

2023-12-31

我想使用 SIMD 运算查找字节数组中的最小值/最大值。到目前为止,我能够遍历数组并将最小值/最大值存储到 __m128i 变量中,但这意味着我正在查找的值混合在其他值中(确切地说是其他 15 个值)。

我找到了这些讨论here https://stackoverflow.com/questions/22256525/horizontal-minimum-and-maximum-using-sse and here https://stackoverflow.com/questions/9877700/getting-max-value-in-a-m128i-vector-with-sse对于整数,并且这一页 http://shybovycha.tumblr.com/post/122400740651/speeding-up-algorithms-with-sse对于浮动,但我不明白 _mm_shuffle* 是如何工作的。所以我的问题是:

  1. 为了从 __m128i 变量中提取最小/最大字节(或无符号字节)值,我必须执行哪些 SIMD 操作?
  2. _mm_shuffle* 如何工作?当我在网上查看“最小”文档时,我不明白。我知道这与_MM_SHUFFLE 宏 https://msdn.microsoft.com/en-us/library/4d3eabky(v=vs.71).aspx,但我不明白这个例子。

这是水平最大值的示例uint8_t:

#include "tmmintrin.h" // requires SSSE3

__m128i _mm_hmax_epu8(const __m128i v)
{
    __m128i vmax = v;

    vmax = _mm_max_epu8(vmax, _mm_alignr_epi8(vmax, vmax, 1));
    vmax = _mm_max_epu8(vmax, _mm_alignr_epi8(vmax, vmax, 2));
    vmax = _mm_max_epu8(vmax, _mm_alignr_epi8(vmax, vmax, 4));
    vmax = _mm_max_epu8(vmax, _mm_alignr_epi8(vmax, vmax, 8));

    return vmax;
}

将返回所有元素中的最大值。如果您需要该值作为标量,则使用_mm_extract_epi8.

如何适应最小值和带符号的最小值/最大值应该是相当明显的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 __m128i 中查找最小/最大值 的相关文章

随机推荐

  • Python webapp2:重定向回来

    我正在使用谷歌应用程序引擎作为基本应用程序 该场景很简单 我单击 注销 我希望我的注销处理程序将我重定向回我来自的页面 我该如何实现这一目标 谢谢 When 创建注销网址 https developers google com appeng
  • 仅在 Chrome 上,Angular 项目中的控制台上出现 zone.js 违规警告

    我有一个使用创建的 Angular 4 项目 angular cli 在开发模式下运行应用程序时 我在控制台中收到这些警告 zone js 1489 Violation setTimeout handler took 209ms 2 Vio
  • 列中的行

    我有这张表 Id Kind 1 MODEL 1 MOTOR 2 MODEL 2 MOTOR 3 MOTOR 4 MODEL 我想插入到另一个表中 IdModel IdMotor 1 1 1 2 1 3 2 1 2 2 2 3 4 1 4 2
  • C++ 规范是否说明了如何在 static_cast/const_cast 链中选择类型以用于 C 样式转换?

    这个问题涉及我在尝试回答时在 C 规范中注意到的一些内容这是关于 C 风格强制转换和类型转换的早期有趣问题 https stackoverflow com q 39215125 501557 C 规范在第 5 4 节中讨论了 C 风格的强制
  • TensorFlow:`tf.data.Dataset.from_generator()` 不适用于 Python 3.x 上的字符串

    我需要迭代大量图像文件并将数据提供给张量流 我创建了一个Dataset返回由生成器函数生成文件路径名作为字符串 然后使用将字符串路径转换为图像数据map 但它失败了 因为生成字符串值不起作用 如下所示 有解决办法或解决这个问题吗 2017
  • 为 NestJs REST API 创建 DTO、BO 和 DAO

    我想开始使用 NestJs 创建 REST API 但我不确定如何设置可扩展层通信对象 所以从关于如何的文档开始吧 https docs nestjs com controllers我想出了一个UsersController处理 HTTP
  • javascript_include_tag :默认值不起作用

    我正在将一个应用程序迁移到 Rails 3 以下内容 我在一些地方看到推荐的内容 不起作用 就我而言 它扩展到 这会导致 404 据我了解 defaults 不应该包含名为 defaults js 的文件 它应该包含一些基本的东西 比如pr
  • 如何将R闪亮集成到当前应用程序中

    我想知道是否可以将 R闪亮集成到当前网站 PHP 或 RoR 中 我只是想利用 R Shiny 的强大功能将应用程序嵌入到当前网站中 但据我所知 Shiny 需要在自己的服务器上运行 而不是在 Apache 上运行 是否可以在不使用 ifr
  • 找到多边形内最大的矩形 - Python

    有没有一种简单的方法来获得适合形状的最大直立矩形 我正在使用 OpenCV http docs opencv org master dd d49 tutorial py contour features html gsc tab 0 htt
  • 将字符串转换为 PHP 中定义的常量

    假设我已经定义了常量ERROR 0如下 define ERROR 0 An error occurred 现在 假设我有字符串 ERROR 0 但我想将其转换为常量ERROR 0这样我就可以获得字符串 发生错误 我怎样才能做到这一点 Tha
  • Graphql 数据建模:扩展类型和接口

    这是一个非常基本的问题 但是如何调用扩展类型或接口 所有文档都指向使用extend type Person添加基于人员的字段 我希望它能像这样工作 Employee extend type Person salary Int 但文档表明它是
  • 垫菜单始终出现在页尾

    我实施了mat menu来自有角度的材料 菜单始终出现在页面末尾 代码如下 我尝试过设置z index和别的css属性 但菜单没有出现在原来应该出现的位置 HTML
  • 记录私有泛型类型的公共具体变体

    In 我的另一个问题 https stackoverflow com q 70102943 857390 我问如何只公开公开一个具体的变体 Foo
  • Sequelize 连接两个不关联的表

    我试图通过连接两个不使用关系 关联 的表来检索数据 这两个表如下 mysql gt desc partner txns Field Type Null Key Default Extra id int 11 NO PRI NULL auto
  • .NET 3.5 与 .NET 3.0

    我想在 WPF 中编写一个程序 但不确定应该以 net35 还是 net30 为目标 net35的优点是显而易见的 但是 我仍然看到 net30 的一个主要优势 它内置于 Vista 中 因此 使用 Windows Vista 的用户无需下
  • 使用 Trello API 创建新卡

    我正在尝试将新卡添加到 Trello 列表中 但有点卡住了 我尝试过两种方法发布 https api trello com 1 lists mylistid cards key mykey token myToken name myName
  • 将 FFMPEG 编码为 MPEG-DASH – 或使用关键帧簇的 WebM – 用于 MediaSource API

    我目前正在将视频流发送到 Chrome 以通过 MediaSource API 进行播放 据我了解 MediaSource 仅支持使用 MPEG DASH 编码的 MP4 文件 或具有以关键帧开头的簇的 WebM 文件 否则会引发错误 媒体
  • jmeter - 如何忽略 *jtl 文件中测量的选定采样器

    我的测试配置 循环控制器 gt Beanshell Sampler vars put test CSVRead test 0 Add it to an existing array retrieved from vars getObject
  • 如何让 Chrome 在新标签页中打开页面

    我只想在新选项卡中打开所有页面 是关于 chrome 还是我的代码 在格式化计算机之前 我可以使用此代码执行此操作 但现在第一个链接在新选项卡中打开 其他链接在新窗口中打开 我认为我的一些 chrome 选项坏了或者什么的 for var
  • 从 __m128i 中查找最小/最大值

    我想使用 SIMD 运算查找字节数组中的最小值 最大值 到目前为止 我能够遍历数组并将最小值 最大值存储到 m128i 变量中 但这意味着我正在查找的值混合在其他值中 确切地说是其他 15 个值 我找到了这些讨论here https sta