【问题标题】:Are there SIMD instructions in CIL?CIL 中有 SIMD 指令吗?
【发布时间】:2014-06-20 00:52:14
【问题描述】:

当我们用 C(或 C++)编写时,我们可以使用 _asm 内联汇编代码。这使我们能够优化程序的一小部分高度使用的部分,以利用assembly SIMD instructions。大多数时候我们不需要它,但例如视频处理、加密/解密和数学算法将充分利用它们。在某些情况下,一些编译器(我相信 gcc)甚至可以对 plain 代码使用 SIMD 指令,因此即使我们不知道它们的存在,我们也会使用它们。

从我幼稚的角度来看,在 CIL 中支持它们应该很容易(在不支持的极少数情况下退回到软件实现)。不同的故事是在 C# 中公开它们(例如),但对于这样的特殊功能,即使是 msil 块(类似于 _asm)也会很好用。

所以我的问题是:在ECMA 335 中,除了MSIL 中是否有任何(记录或未记录的)SIMD 指令支持,我没有找到任何东西?

我不考虑它们在 JIT 编译器生成的内容中的用途,而是一种在我的 .NET 应用程序中明确使用它们的机制。当然,我可以使用所有这些算法编写一个 C++/CLI 程序集,然后在我的 .NET 应用程序中简单地使用它们,但是我会避免使用混合模式程序集以完全保留应用程序可验证(并且不会为不同的架构发布不同的程序集)。

即使是最肮脏的伎俩也是受欢迎的,因为它必须用于极少数专门的功能。

我知道 Microsoft SIMD-enabled Vector Types 的存在,它们是一件很棒的事情,但是 (1) 我不是在寻找外部库,而且我绝对不想部署 beta JIT,(2) 他们仅针对 Windows 8 64 位,(3) 到目前为止 SIMD 支持非常小(如果我需要,从我的 POV 获得,然后我想要它,又脏又快)。

【问题讨论】:

    标签: c# .net simd cil


    【解决方案1】:

    恐怕 CIL 级别什么都没有。

    正如您所说,Microsoft 正在为未来版本的 .NET 提供 SIMD 支持。

    如果你可以使用 Mono,它已经有一段时间了 SIMD support(目前与 Microsoft.Bcl.Simd API 不兼容。

    .NET 和 Mono 在这里共享一个共同的方法,即 JIT intrisics 和标准 IL 实现。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2011-04-02
      • 2011-07-16
      • 2022-01-20
      • 2023-03-17
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多