从 Microsoft .net 调用 mono c# 代码?

问题描述 投票:0回答:3

我有一些用 C# 编写的神经网络代码,这些代码将受益于使用 SIMD 支持。 Mono 2.2 刚刚发布,支持 SIMD,但 Microsoft 的 c# 尚不支持。 对我的 C# 设置感到满意,我想知道是否可以为该部分编写一个 Mono 库并从 .net 调用它。

编辑: 我想我真正想知道的是是否可以将 mono 编译成类似 DLL 的东西,然后我可以从 dotnet 调用它。我在 podcast 上听到 Miguel de Icaza 说,对于 iphone,mono 编译器将允许他们编译为 Moonlight 的 exe,因此它不会违反 iphone 的服务条款,所以这让我思考还有什么可以你编译到。

我在另一个 podcast Herding Code Episode 28 中听到 Miguel de Icaza 说你可以使用 mono 编译器编译为 exe,而不仅仅是中间代码。这意味着什么?

这引起了我的好奇心,所以我想我应该悬赏它。

c# mono
3个回答
11
投票

来自Miguel de Icaza 的博客

我们的库提供了 C# 后备 所有加速指令。 这意味着如果您的代码运行在 不提供任何SIMD的机器 支持,或其中一项操作 您正在使用的不支持 机,代码将继续 工作正常。

这也意味着您可以使用 Mono.Simd API 与 Microsoft .NET 相结合 Windows 进行原型设计并开发您的 代码,然后全速运行 使用单声道。

据我了解,这意味着您可以编写使用 Mono.Simd 的代码,并且能够在 .Net 下运行它,但它不会比常规代码更快,因为 .Net 运行时不尚支持SIMD。


5
投票

本质上,如果你用 Simd 编写它并与你的代码一起分发 dll,如果目标 VM 支持它,它将使用加速。 如果没有,它就不会破裂。 因此,您可以使用该库并为您的程序中使用 Mono 运行 .NET 应用程序的任何用户提供速度提升。

据说微软计划在其运行时的下一个版本中添加此类支持,尽管我找不到该链接,并且现在手边也没有它——如果有人可以从历史备份中挖掘该链接有足够的兴趣


5
投票

为了利用 SIMD 功能,运行时应该能够原生支持它。基本上,Mono 在运行时会特别对待

Mono.Simd
命名空间。显然,Microsoft .NET运行时不支持此功能。但是,提供的
Mono.Simd
程序集是用托管代码编写的完全有效且正常的 .NET 程序集,因此它可以在 .NET CLR 上运行,但它只是 SIMD 指令功能的软件模拟。

您可以在 Windows 上运行 Mono 运行时并利用这些功能,但没有直接的方法可以在 .NET 上运行应用程序的一半,在 Mono 上运行另一半(当然,您可以使用通信机制,因为两个不同的应用程序可以使用,但对于这种情况根本没有意义)。

© www.soinside.com 2019 - 2024. All rights reserved.