【问题标题】:.NET SIMD adding byte and ushort array.NET SIMD 添加字节和 ushort 数组
【发布时间】:2016-10-31 12:13:02
【问题描述】:

有一个长字节数组需要添加到短类型的目标数组中。可以在这里找到解决方案: SEE byte + short. 我正在尝试使用managed SIMD 来做到这一点 它缺乏对“解包”指令的支持(需要将单个 16 元素字节数组解包为两个 8 元素短数组以进行添加)。 以下是托管 SIMD 支持的操作:

有谁知道如何使用上面简化的 SIMD 指令集(避免标量加法)实现两个数组的相加(short[] = byte[] + short[])?

【问题讨论】:

    标签: .net vectorization sse simd managed


    【解决方案1】:

    下面的API proposal 会添加收窄和加宽操作。提议的 API 遵循与底层 SSE2 指令类似的设计;为了加宽,输入向量的下半部分和上半部分将被写入两个输出向量。为了缩小范围,来自两个输入向量的元素被转换(有符号或无符号饱和度),然后打包成一个输出向量。

    作为 API 提案,实际发布可能需要很长时间,也可能需要很长时间。

    除非最终升级 JIT 以生成内在函数,否则这些方法是无用的(在性能方面)。恐怕这意味着您应该简单地假设该功能尚不存在。如果您当前使用本机代码方法(通过 C++/CLI 或 P/Invoke),则应继续使用当前方法,因为尚不存在替代方法。

    了解 JIT 端实现的状态:Add JIT intrinsics support for vector conversion on AMD64 and x86 #10662

    根据 cmets,它不会出现在 .NET Standard 2.0 中,但很可能是 .NET Standard 2.1 的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多