【发布时间】:2014-01-31 19:18:31
【问题描述】:
C# 和 Visual Basic 以及 .NET CLR 是用于用户界面和业务线应用程序等的优秀开发环境。
但是,我已经编写了很多执行时间在O(n^3): n > 1000 左右的代码,并且在几个地方,比这更高。基本上这些循环从一个大数组中读取,做一些数学运算并进行五六个测试,然后将结果写入第二个相同大小的数组。
其中大部分是从英特尔 Fortran 程序移植的代码,以便将它们带入 64 位世界。我注意到,如果没有对该代码进行任何自动矢量化,执行时间会慢得多。 .NET 不支持使用目前销售的每个英特尔处理器上的 SIMD 操作。
由于函数已经以严格的算法编写,可以由熟练的程序员移植,我认为要求程序员将代码移植到 C++ CLR 库可能是一种方法。
- 是否可以获得一个自动矢量化的 C++ 库,并提供 CLR 接口供 C#/VB 程序调用?
- 如果没有,是否存在解决方法? COM 接口是一种这样的解决方法吗?
- 如果是,它必须采取什么形式?
【问题讨论】:
标签: c# c++ .net vectorization auto-vectorization