如何使用 avx 指令将 float 向量转换为短整型?

2024-01-22

基本上我如何使用 AVX2 内在函数编写与此等效的内容?我们在这里假设result_in_float属于类型__m256, while result属于类型short int* or short int[8].

for(i = 0; i < 8; i++)
    result[i] = (short int)result_in_float[i];

我知道浮点数可以使用以下命令转换为 32 位整数__m256i _mm256_cvtps_epi32(__m256 m1)固有的,但不知道如何将这些 32 位整数进一步转换为 16 位整数。我不仅想要这样,还想要将这些值(以 16 位整数的形式)存储到内存中,并且我想使用向量指令来完成这一切。

在互联网上搜索,我发现了一个名为_mm256_mask_storeu_epi16,但我不太确定这是否有效,因为我找不到其用法的示例。


_mm256_cvtps_epi32是一个很好的第一步,转换为压缩的短裤向量有点烦人,需要跨切片洗牌(所以最好它不在依赖链中)。

由于可以假设这些值在正确的范围内(根据注释),我们可以使用_mm256_packs_epi32代替_mm256_shuffle_epi8进行转换,无论哪种方式,它都是端口 5 上的 1 周期指令,但使用_mm256_packs_epi32避免必须从某处获取洗牌掩码。

所以把它放在一起(未测试)

__m256i tmp = _mm256_cvtps_epi32(result_in_float);
tmp = _mm256_packs_epi32(tmp, _mm256_setzero_si256());
tmp = _mm256_permute4x64_epi64(tmp, 0xD8);
__m128i res = _mm256_castsi256_si128(tmp);
// _mm_store_si128 that

最后一步(强制转换)是免费的,它只是改变类型。

如果您有两个浮点向量要转换,您可以重复使用大部分指令,例如:(也未测试)

__m256i tmp1 = _mm256_cvtps_epi32(result_in_float1);
__m256i tmp2 = _mm256_cvtps_epi32(result_in_float2);
tmp1 = _mm256_packs_epi32(tmp1, tmp2);
tmp1 = _mm256_permute4x64_epi64(tmp1, 0xD8);
// _mm256_store_si256 this
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 avx 指令将 float 向量转换为短整型? 的相关文章

随机推荐

  • 将字符串数组发送到 Web API 方法

    这是我的客户端 ajax 调用 var list a b c d var jsonText data list ajax type POST url api scheduledItemPriceStatus updateStatusToDe
  • gprof 没有输出

    我正在尝试使用 gprof 来分析我正在开发的一些数字代码 但 gprof 似乎无法从我的程序中收集数据 这是我的命令行 g Wall O3 g pg o fftw test fftw test cpp lfftw3 lfftw3 thre
  • 蓝牙适配器不会停止扫描 BLE 设备

    在我的应用程序中 我有开始和停止按钮 当用户按下开始时 我调用 startScan 方法 bluetoothAdapter getBluetoothLeScanner startScan getLeScanCallback 当用户按停止时
  • 如何循环遍历数据库的表?

    我试图使用以下代码循环数据库的表 但出现错误java lang UnsupportedOperationException 我什至尝试过cfloop query and other attributes出现错误复杂值无法转换为简单值 谁能告
  • Lua 无法计算 math.abs(29.7 - 30) <= 0.3 [重复]

    这个问题在这里已经有答案了 今天早上我在我的 Lua 脚本中发现了一个错误 这看起来很奇怪 这次评估怎么会失败呢 示例可以在以下位置进行测试here http www lua org cgi bin demo 第一个例子 if math a
  • 为什么 Golang 强制大括号不在下一行?

    correct if true 不正确 if true 为什么要强制执行这种样式 它与语言规范有关 还是只是因为他们更喜欢一种样式而不是另一种样式 为什么有大括号但没有分号 为什么我不能将左大括号放在下一行 Go 使用大括号进行语句分组 这
  • 格式化numpy数组中的浮点数[重复]

    这个问题在这里已经有答案了 如果我有一个像这样的 numpy 数组 2 15295647e 01 8 12531501e 00 3 97113829e 00 1 00777250e 01 如何移动小数点并格式化数字 这样我最终会得到一个像这
  • 如何将 fgetcsv 与字符串一起使用[重复]

    这个问题在这里已经有答案了 如何使用fgetcsv其中输入是字符串而不是资源 如何将字符串转换为资源 fgetcsv需要文件句柄资源 str 1981 2992 19191 n392 488 299 n some ntext 199 222
  • 无法拉伸内部 StackPanel

    使用下面的设置 我可以将窗口的整个宽度着色为紫色 内部堆叠面板为黄绿色 并移至左侧
  • 在 Rails 3.2 中禁用解释

    是否可以通过配置全局禁用 Rails 3 2 中的新解释功能 我正在使用 activerecord sqlserver adapter 3 2 1 并且 gem 的解释 显示计划 部分似乎存在一些错误 引用自http weblog ruby
  • 从 C# 以编程方式创建文件到 Onedrive?

    我想从 C 直接创建 doc docx pptx 或 excel 文件到我的 Onedrive 帐户 我已经尝试过这个 但它对我不起作用 有人知道我做错了什么吗 谢谢 public async Task
  • 是否可以部署独立的 .NET Framework 应用程序?

    我正在开发一个使用 Net Framework 的 C Net 应用程序 但当用户在其计算机上安装该应用程序时遇到问题 他们中的一些人只是不知道如何安装 Net Framework 我正在寻找这个问题的解决方案 并且我发现了 Net Cor
  • 如何使用变量而不是文件来让任何命令写入?

    我在用着curl cookie jar
  • Python 中的 RAII:__del__ 有什么意义?

    乍一看 好像是Python的 del 特殊方法提供了与 C 中析构函数几乎相同的优点 但根据Python文档 https docs python org 3 4 reference datamodel html https docs pyt
  • 在 Nexus 上使用 nuget 代理时,dotnet 恢复失败

    我在内部网络的 Nexus v 3 9 0 01 上有一个 nuget 代理 我自己还没有填充本地 Nexus 存储库 并且不知道它是如何完成的或是否出现任何问题 但是 我可以手动上传新包 构建在 Bamboo 代理上进行 无法连接到公共存
  • 如何将 Scala 脚本拆分为多个文件

    作为脚本语言 Scala 是否有某种 include 指令 或者有没有办法从其他脚本启动脚本 The scala命令有 load filename命令以交互方式加载 Scala 文件 或者 scala命令的 i filename参数可用于预
  • Android 中的 Viewpager 底部有固定选项卡,每个选项卡中有图标和文本

    我想创建以下布局 一个带有 viewpager 的活动以及一个选项卡 该选项卡保留在活动的底部以指示用户位于 4 个片段中的哪一个 并且所选选项卡通过 活动颜色 突出显示 我花了一些时间在网上查看各种资源来添加此选项卡 http devel
  • 更好地使用验证或离开事件来验证文本框数据?

    在为 VB NET 文本框编写验证逻辑时 最好使用哪个事件处理程序 证实 or Leave 据我了解 它们是同时发生的 然而 根据这篇文章 MSDN Control Leave 事件 http msdn microsoft com en u
  • CSS 网格。隐藏未使用的区域

    我有基于已知元素构建的网格模板区域 但并非所有元素都可以从数据库中获取 如果我没有从数据库中获取某些内容 那么我不会渲染 html 元素 并且会得到一个带有间隙的空 虚线 行 请参阅附图 空行位于蓝色框下方 是否可以隐藏未使用的区域或消除其
  • 如何使用 avx 指令将 float 向量转换为短整型?

    基本上我如何使用 AVX2 内在函数编写与此等效的内容 我们在这里假设result in float属于类型 m256 while result属于类型short int or short int 8 for i 0 i lt 8 i re