从C#访问数学协处理器

时间:2011-03-17 21:53:08

标签: c# assembly

如何从C#代码访问数学协处理器?我想尽可能快地对整数进行一些计算。我知道在C ++编译器下可以在其中使用汇编代码,但是.Net呢?

4 个答案:

答案 0 :(得分:8)

JIT编译器知道数学协处理器并将使用它。你真正想要的是使用SIMD引擎,而不是数学协处理器。这是JIT编译承诺的一部分,运行时可以选择每台计算机上最快的硬件加速,但我认为.NET实际上并没有这样做,至少在第4版中。

或者您使用术语“数学协处理器”来表示除x87 FPU之外的其他内容?有一些FPGA板作为加速器/协处理器系统销售。如果这就是您的意思,您需要查阅特定产品随附的编程手册。没有用于访问它们的特殊CPU指令,内联汇编程序在这种情况下没有帮助。

例如,GPU在数据集上的数学运算速度比CPU的SIMD引擎更快,您可以使用DirectX Compute Shaders(或p /调用OpenCL)从.NET访问,无需汇编程序。

答案 1 :(得分:4)

我认为不可能直接从托管代码执行此操作。您仍然可以调用非托管代码进行这些计算,但是互操作编组的成本是否值得,很难说。您必须尽可能地将其最小化并在非托管代码中执行所有计算,并且只进行一次调用以最小化开销。

答案 2 :(得分:4)

不,您不能在C#托管代码中直接使用内联汇编程序。

您最好的办法是确保您的通用方法/算法干净,高效,数学运算清晰高效,然后依靠编译器有效利用可用的协处理器。

答案 3 :(得分:1)

C#作为一种语言本身不支持,也不支持.NET作为框架。

如果您需要那种的速度或实力,请完全使用其他内容。