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

7
我有一些用C#编写的神经网络代码,使用SIMD支持会更加优化。最新版的Mono 2.2支持SIMD,但是微软的C#还不支持。因为我很满意我的C#设置,所以我想知道是否可以在Mono中编写一个库,并从.NET中调用它。
编辑: 我想知道的是,是否可以将mono编译成类似DLL的东西,然后可以从dotnet中调用它。我听到Miguel de Icazapodcast上说,对于iPhone,mono编译器将允许他们编译成一个exe文件,以便在moonlight上使用,这样就不会违反iPhone的条款,所以我开始思考还能编译什么。
我听到Miguel de Icaza在另一个播客Herding Code Episode 28上说,你可以使用mono编译器将其编译为exe而不仅仅是中间代码。这意味着什么?
这引起了我的好奇心,所以我想放一个赏金来研究一下。
3个回答

11

来自Miguel de Icaza的博客:

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

这也意味着,您可以在Windows上使用Microsoft的.NET原型和开发代码,并使用Mono以全速运行它。

据我所理解,这意味着您可以编写使用Mono.Simd的代码,并能够在.NET下运行,但是它不会比普通代码更快,因为.NET运行时尚不支持SIMD。


5
为了利用SIMD功能,运行时应该能够本地支持它。基本上,Mono在运行时特殊处理Mono.Simd命名空间。显然,Microsoft .NET运行时不支持此功能。但是,提供的Mono.Simd程序集是一个完全有效和正常的.NET程序集,由托管代码编写,因此可以在.NET CLR上运行,但它只是对SIMD指令所做的软件仿真。
您可以在Windows上运行Mono运行时并利用这些功能,但没有直接的方法在.NET上运行应用程序的一半,在Mono上运行另一半(当然,您可以使用通信机制,就像两个不同的应用程序可以使用,但对于这种情况根本没有意义)。

5
基本上,如果您使用Simd编写代码并将dll与您的代码一起分发,它将在目标虚拟机支持的情况下使用加速。 如果不支持,则不会出现错误。 因此,您可以使用该库,并为运行Mono .NET应用程序的任何用户提供速度提升。
据说微软计划在其下一个运行时版本中添加此类支持,尽管我找不到链接,也没有方便的备份——如果有人足够感兴趣,我可以挖出历史备份中的链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接