从Microsoft .net调用单声道c#代码?

时间:2009-01-24 18:52:00

标签: c# compiler-construction mono

我有一些用c#编写的神经网络代码可以从使用SIMD支持中受益。 Mono 2.2刚出来支持SIMD,但微软的c#还不支持。对我的c#设置感到满意,我想知道是否可以用单声道写一个用于该片段的lib并从.net中调用它。

编辑: 我想我真正想知道的是有可能将mono编译成类似DLL的东西,然后我可以从dotnet调用。我在Miguel de Icaza上听到podcast说,对于iphone,单声道编译器会允许他们编译成月光的exe,所以它没有违反iphone的服务条款,所以它让我想到了什么否则你可以编译到。

我听到Miguel de Icaza在另一个播客Herding Code Episode 28上说你可以使用单声道编译器编译成一个exe而不仅仅是中间代码。这有什么影响?

这引起了我的好奇心,所以我想我会给它一个赏金。

3 个答案:

答案 0 :(得分:11)

来自Miguel de Icaza's blog

  

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

     

这也意味着你可以使用   使用Microsoft .NET的Mono.Simd API   Windows原型和开发你的   代码,然后全速运行   使用Mono。

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

答案 1 :(得分:5)

为了利用SIMD功能,运行时应该能够原生支持它。基本上,Mono在运行时专门处理Mono.Simd命名空间。显然,Microsoft .NET运行时不支持此功能。但是,提供的Mono.Simd程序集是一个用托管代码编写的完全有效且正常的.NET程序集,因此它可以在.NET CLR上运行,但它只是SIMD指令所做的软件模拟。

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

答案 2 :(得分:5)

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

据说微软计划在其下一个版本的运行时添加这样的支持,虽然我找不到这个链接并且没有把它放在这个方面 - 这可以从历史备份中挖掘出来如果有人有兴趣的话。