我有一些用c#编写的神经网络代码,可以从使用SIMD支持中受益.Mono 2.2刚出来支持SIMD,但微软的c#还不支持.对我的c#设置感到满意,我想知道我是否可以用单声道写一个用于该片段的lib并从.net调用它.
编辑:我想我真正想知道的是有可能将单声道编译成类似DLL的东西,然后我可以从dotnet调用.我在一个播客上听到Miguel de Icaza说,对于iphone,单声道编译器会允许他们编译成月光的exe,所以它没有违反iphone的服务条款,所以它让我想到你还能编译到什么.
我听到Miguel de Icaza在另一个播放Herding Code第28集说你可以使用单声道编译器编译到exe而不仅仅是中间代码.这有什么影响?
这让我产生了好奇心,所以我想我会给它一个赏金.
来自Miguel de Icaza的博客:
我们的库为所有加速指令提供C#回退.这意味着如果您的代码在不提供任何SIMD支持的计算机上运行,或者您的计算机不支持您正在使用的某个操作,则代码将继续正常运行.
这也意味着您可以在Windows上使用Mono.Simd API与Microsoft的.NET进行原型设计和开发代码,然后使用Mono全速运行.
据我了解,这意味着您可以编写使用Mono.Simd的代码,并且能够在.Net下运行它,但它不会比常规代码快,因为.Net运行时不支持SIMD呢.
为了利用SIMD功能,运行时应该能够原生支持它.基本上,Mono Mono.Simd
特别在运行时处理命名空间.显然,Microsoft .NET运行时不支持此功能.但是,Mono.Simd
提供的程序集是一个用托管代码编写的完全有效且正常的.NET程序集,因此它可以在.NET CLR上运行,但它只是SIMD指令所做的软件模拟.
您可以在Windows上运行Mono运行时并利用这些功能但是没有直接的方法可以在.NET上运行一半的应用程序而另一半在Mono上运行(当然,您可以使用两种不同的应用程序可以使用的通信机制,但这种情况根本没有意义.
基本上,如果您使用Simd编写它并使用您的代码分发dll,如果目标VM支持它,它将使用加速.如果没有,它不会破裂.因此,您可以使用该库,并为您的程序的任何用户提供使用Mono运行.NET应用程序的速度提升.
据说微软计划在其运行时的下一个版本中添加这样的支持,虽然我找不到这个链接并且在这一点上没有它的便利 - 如果有人,可以从历史备份中挖出链接很感兴趣.