【发布时间】: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 获得,然后我想要它,又脏又快)。
【问题讨论】: