在托管代码中调用SSE代码(对齐)

Jan*_*Jan 7 c# c++ sse managed alignment

这是我的问题:我们有一个用C++编写的数学库,它大量使用SSE.我们需要在我们的工具的托管层(使用C#编写)中使用相同的数学库.

问题是,数学库类必须是16字节对齐(SSE才能工作).但是,在编译托管代码时,我会遇到很多错误,因为不支持"__declspec(align(X))".

有什么想法是否可能以某种方式?我无法找到任何有用的信息.

一些其他信息:

用C++编写的数学库使用SSE来获得最大性能.但是,我们的工具不需要最高性能,与普通的C#代码相比,我们甚至可以获得性能提升.它更多的是能够实际执行我们所有的代码(它是一个巨大的代码库),而无需人们在数据类型之间来回转换.

所以这只是关于可用性,而不是关于性能.

我试过这个:我把所有的数学函数都放到cpp中,而不是把它们作为内联函数.现在它们从自己的DLL导出.然而,vector-class当然还有一个__m128私有成员用于其数据.

只要我将这样的变量放在托管代码中,编译器就会告诉我,我的托管代码现在是本机代码.

这是否意味着我的类定义中不能有这样的类型并将其完全隐藏在DLL接口之后?谢谢.

Ste*_*end 5

听起来你正在尝试将数学库编译为托管代码?相反,您应该将其保留在本机代码中,并使用P/Invoke直接从托管代码中调用它.

将所需的结构从C#编组到具有正确对齐的本机代码中仍然很复杂,但应该是可行的.

这里显示的工作可能对您理解问题很有用.

我正在尝试使用SSE2加速完全使用C#.NET编写的模拟应用程序的冒险尝试.到目前为止,我花了几天时间研究在.NET应用程序中使用SSE2的可行性.


Bry*_*her 2

struct打包对您有帮助吗?

http://www.developerfusion.com/article/84519/mastering-structs-in-c/

您可以使用它将字段与内存中的特定区域对齐。