2011-02-11 45 views
0

据我所知,JIT不会将MSIL编译为将使用x86上的MMX指令的本机机器码。如果这是真的(因为我很难找到关于此问题的最新信息),那么我想要一种在我的代码中使用MMX的方法。我正在研究一个将要做几乎所有单精度浮点数乘法(它是人工神经网络)的应用程序。我基本上有这个问题的几个问题。使用托管C++的MMX

我的第一个问题是,如果我在同一个项目中混合使用托管代码和非托管代码,是不是所有编译到MSIL都是因为“It Just Works”?如果我将非托管部分制作为静态或动态库,编译它们,并将它们用于托管项目,我会获得最佳性能吗?

我也研究过使用我的GPU与OpenCL(或CUDA,但它不会在ATI :()上工作,但如果我这样做,编译的GPU代码不会被调用总之,我只是寻找最好的方式来获得最快的浮点关节,同时仍然能够使用我的托管GUI和多线程,并使用像MMX这样的扩展似乎是我最好的选择(如果我只需要使用CPU)。什么是最好的方式有可能会去这样做这样的事?

感谢。

+0

我没有你的问题的直接答案,但我想知道你是否可能不改进神经网络算法或其使用,以提高性能?你可能需要更多的速度,但是我问,因为我看到许多神经网络项目都遭受了糟糕的神经架构,参数过度探索,数据设计较弱等等。 – Predictor 2011-02-11 11:37:22

回答

3

MMX是一个整数指令集,而不是浮点数。它只支持64位打包的字节,字和双字整数。上证所有浮点支持。使用代码中管理的#pragma在机器代码和MSIL代之间切换。

0

你可以混合米非持久代码和非托管代码。只有托管编译到MSIL。其余的是本地的。

管理和非管理之间的成本...但不是太糟糕。

所以我会写一个原生lib,完成所有高性能的东西,然后从托管代码中使用它。

0

我的第一个是,如果我混合托管,并在同一个项目非托管代码,是不是所有的编译成MSIL,因为“这只是工作”

号如果你没有编译与/clr:pure,本机代码可以保持本机并与.NET代码混合在一起。这被称为混合模式组装。 (使用/clr:pure时,一切都变为IL,并且根本无法使用本机代码。)本机代码将保持原生状态。