gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:29:47 27 4
gpt4 key购买 nike

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

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

知道这是否可能吗?我找不到任何有用的信息。

一些附加信息:

用 C++ 编写的数学库使用 SSE 来实现最佳性能。然而,我们的工具不需要最高性能,与一般 C# 代码相比,我们甚至可以承受性能损失。它更多的是能够实际执行我们所有的代码(这是一个巨大的代码库),而无需人们在数据类型之间来回转换。

所以这实际上只与可用性有关,与性能无关。

我试过这个:我将所有数学函数放入一个 cpp 中,而不是将它们作为内联函数。现在它们从自己的 DLL 中导出。然而, vector 类当然仍然有一个 __m128 私有(private)成员用于其数据。

只要我将这样一个变量放入托管代码中,编译器就会告诉我我的托管代码现在是 native 代码。

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

最佳答案

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

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

显示的作品 here可能对您理解这些问题很有用。

I'm embarking on the adventurous course of trying to accelerate a simulation application written entirely in C#.NET using SSE2. So far I've spent a few days looking at the feasibility of using SSE2 in a .NET application.

关于c# - 在托管代码中调用 SSE 代码(对齐),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com