Using SSE in c# is it possible?

后端 未结 10 1912
借酒劲吻你
借酒劲吻你 2020-11-29 11:02

I was reading a question about c# code optimization and one solution was to use c++ with SSE. Is it possible to do SSE directly from a c# program?

相关标签:
10条回答
  • 2020-11-29 11:53

    Filip is correct. I have another, older post showing a similar, but more detailed example. I have actually run this code, and modified it myself to prove to myself that it works. I am contemplating using this technique in a project I am working and is why I am out looking to see what may be new since this is a bit old. As the author implies, you can write any function you wish in C++, compile it, then copy the bytes into your C#.

    http://blogs.msdn.com/b/devinj/archive/2005/07/12/438323.aspx

    I would add that Joe's CLI C++ class is a good idea as well, however, I don't think the sse compiler flag and the /clr flag are compatible on the same project. I just verified that: have to write your high perf code in a separate project to use the SSE (/arch:sse or /arch:sse2) compiler flag as /clr is incomatible. To do anything much more complex than do simple arithmetic on a few inputs, I think this is the best approach.

    0 讨论(0)
  • 2020-11-29 11:56

    SIMD for .NET will be available in the near future. RyuJIT (the next-generation JIT compiler for .NET) required for this feature ATM.

    You should use Microsoft.Numerics.Vectors.Vector<T> class from Microsoft.Bcl.Simd package to take advantage of this feature. Sample code here.

    0 讨论(0)
  • 2020-11-29 11:57

    Sure you can (the more important question is - why would you? Just leave it to the runtime; that's its job).

    C# lets you map a delegate to a memory address. That memory address can contain raw assembly codes. You can read more on Michael Giagnocavo's blog.

    Although I have not tried myself, it may be possible to use Marshal.GetDelegateForFunctionPointer as well.

    0 讨论(0)
  • 2020-11-29 12:02

    Recently Microsoft has released a beta SIMD vector library (Microsoft.Bcl.Simd) for C# which requires installation of the RyuJIT CTP and works only Windows 8.

    You can also just used a native SSE library and invoke it from C#. For example the Yeppp library, see this StackOverflow answer.

    0 讨论(0)
提交回复
热议问题