当我们用C(或C ++)编写时,我们可以使用_asm
内联汇编代码。这使我们能够优化我们程序中一小部分高度使用的部分,以利用assembly SIMD instructions。大多数情况下我们不需要它,但是,例如,视频处理,加密/解密和数学算法将充分利用它们。在某些情况下,一些编译器(我确定gcc)甚至可以使用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支持相当小(如果我需要这个,那么我希望它全部,脏和快)。
答案 0 :(得分:5)
我担心CIL级别没什么。
正如您所指出的,Microsoft正在推进SIMD对未来.NET版本的支持。
如果你可以使用Mono,它有一段SIMD support一段时间(目前与Microsoft.Bcl.Simd API不兼容。
.NET和Mono在这里都有一个共同的方法,JIT内在函数与标准的IL实现。