是否可以在c#中使用SSE?我正在阅读有关c#代码优化的问题,一种解决方案是将c++与SSE一起使用。是否可以直接从c#程序执行SSE?即将发布的Mono2.2版本将支持SIMD。MigueldeIcaza在这里发布了关于即将推出的功能的博客,API在这里。虽然将有一个库支持在Microsoft的.NETWindows运行时下进行开发,但除非您在Mono运行时下运行代码,否则它不会具有您正在寻找的性能优势。根据您的情况,这可能是可行的。更新:发布了Mono2.2C#可以显式调用SSE吗?不。C#不能生成内联ILless内联x86/amd64程序集。如果可以的话,CLR,更具体地说是JIT,在大多数情况下不需要强制执行SSE。我说最多是因为我不是SSE专家,而且我确信在JIT未优化的某些情况下它可能是有益的。用于.NET的SIMD将在不久的将来推出。此功能ATM需要RyuJIT(.NET的下一代JIT编译器)。您应该使用Microsoft.Numerics.Vectors.Vector包中的Microsoft.Numerics.Vectors.Vector类来利用此功能。示例代码在这里。根据这篇论坛帖子,如果SSE在目标机器上可用,MSJIT编译器会自动使用它。如果您想做“大块”工作,最好的办法是使用MMX/SSE内在函数在C++中编写它,然后创建一个非常简单/clr管理的C++类来包装您的函数并将其公开为.net类.然后您的代码就可以像使用普通类一样使用该程序集。关于VC内在函数的更多信息,你可以看看我多年前写的这个小东西。http://msdn.microsoft.com/en-us/library/0aws1s9k.aspx哦-我假设你真的想使用并行函数来加速某些事情。正如其他人所指出的那样-如果您只想以更大的块等方式移动数据,JIT已经知道如何使用SSE来完成这些基础知识。菲利普是对的。我有另一篇较旧的帖子显示了一个类似但更详细的示例。我实际上已经运行了这段代码并自己修改了它以证明它有效。我正在考虑在我正在从事的项目中使用这种技术,这就是为什么我想看看有什么新东西,因为它有点旧了。正如作者所暗示的,您可以在C++中编写任何您想要的函数,编译它,然后将字节复制到您的C#。http://blogs.msdn.com/b/devinj/archive/2005/07/12/438323.aspx我想补充一点,Joe的CLIC++类也是一个好主意,但是,我不认为sse编译器标志和/clr标志在同一项目上兼容。我刚刚验证:高性能代码必须在单独的项目中编写才能使用SSE(/arch:sse或/arch:sse2)编译器标志,因为/clr不可用。要在多个输入上做比简单算术更复杂的事情,我认为这是最好的方法。最近Microsoft发布了一个用于C#的betaSIMD矢量库(Microsoft.Bcl.Simd),它需要安装RyuJITCTP并且只能在Windows8上运行。您也可以使用本机SSE库并从C#调用它。例如,Yeppp库,请参阅此StackOverflow答案。终于可以了这里的帖子http://blogs.msdn.com/b/dotnet/archive/2014/04/07/the-jit-finally-proposed-jit-and-simd-are-getting-married.aspx确实如此(并且更重要的是,问题是——你为什么要这样做?把它留给运行时;那是它的工作)。C#允许您将委托映射到内存地址。该内存地址可以包含原始汇编代码。您可以在MichaelGiagnocavo的博客上阅读更多内容。您也可以使用Marshal.GetDelegateForFunctionPointer,尽管我自己还没有尝试过。以上是C#学习教程:IsitpossibletouseSSEinc#?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
