我有一些用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而不仅仅是中间代码。这有什么影响?
这引起了我的好奇心,所以我想我会给它一个赏金。
答案 0 :(得分:11)
我们的库提供了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应用程序的速度提升。
据说微软计划在其下一个版本的运行时添加这样的支持,虽然我找不到这个链接并且没有把它放在这个方面 - 这可以从历史备份中挖掘出来如果有人有兴趣的话。