Using SSE in c# is it possible?

2020-01-26 10:32发布

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?

标签: c# sse
10条回答
Luminary・发光体
2楼-- · 2020-01-26 10:57

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.

Melony?
4楼-- · 2020-01-26 10:59

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.

狗以群分
5楼-- · 2020-01-26 11:02

If you have a 'chunk' of work you want to do, the best bet is to write it in C++ using the MMX/SSE intrinsics and then make a very simple /clr managed C++ class that wraps your functionality and exposes it out as a .net class. Then your code can just use that assembly as if it were a normal class.

For more about the VC intrinsics you can look at this little ditty I wrote many years ago.

http://msdn.microsoft.com/en-us/library/0aws1s9k.aspx

Oh - I'm assuming you are actually wanting to use the parallel functions to speed something up. As others have pointed out - if you just want to move data in larger chunks and the like, the JIT already knows how to use SSE for those basics.

查看更多
看我几分像从前
6楼-- · 2020-01-26 11:04

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.

The star\"
7楼-- · 2020-01-26 11:05

Can C# explicitly make an SSE call?

No. C# cannot produce inline IL much less inline x86/amd64 assembly.

The CLR, and more specifically the JIT, will use SSE if it's available removing the need to force it in most circumstances. I say most because I'm not an SSE expert and I'm sure that there are cases where it could be beneficial and the JIT does not make the optimization.

查看更多
登录 后发表回答