1

C# 和 Visual Basic 以及 .NET CLR 是用于用户界面和业务线应用程序等的优秀开发环境。

但是,我一直在编写很多代码,它们的执行时间O(n^3): n > 1000比这要高,而且在几个地方。基本上,这些循环从一个大数组中读取,做一些数学运算并进行五六次测试,然后将结果写入第二个相同大小的数组。

其中大部分是从英特尔 Fortran 程序移植的代码,以便将它们带入 64 位世界。我注意到,如果没有对该代码进行任何自动矢量化,执行时间会慢得多。.NET 不支持使用目前销售的每个英特尔处理器上的 SIMD 操作。

由于函数已经以严格的算法编写,可以由熟练的程序员移植,我认为要求程序员将代码移植到 C++ CLR 库可能是一种方法。

  • 是否可以获得一个自动矢量化的 C++ 库,并且还提供一个 CLR 接口供 C#/VB 程序调用?
  • 如果没有,是否存在解决方法?COM 接口是一种这样的解决方法吗?
  • 如果是,它必须采取什么形式?
4

1 回答 1

2

好没问题。C++/CLI 类库项目为您提供了编写托管包装器的方法,即ref 类,它可以直接调用本机 C++ 代码。任何托管代码都可以直接使用这样的类。

在原生 C++ 代码中实现自动矢量化和自动并行化需要 VS2012 或更高版本。设计互操作层以最小化从托管代码到非托管代码并返回的转换次数可能很重要。换句话说,不要一次复制一个双精度值。

于 2014-01-31T21:59:50.497 回答