将代码从vb.net迁移到C ++ dll是否可以显着提高性能?

时间:2018-11-08 07:09:58

标签: c++ vb.net performance dll

我知道之前曾提出过类似的问题,但我相信我的具体情况相差很大,因此这可能是一个问题。如果我错过了另一个非常相似的问题,请为我链接。

我精通vb.net,但是完全是c ++的新手。我在vb.net中有一个子程序,可以执行很多数学运算。有一些三角函数和平方根等。并没有什么要求,但是大约有100个方程,它们必须运行数千次。

这是我做的一些伪代码:

Sub mathsub()
For i = 0 to arraylength
A = somenum(i) * othernum(i)
...
Next
End sub

所以我在for循环中进行了数千次数学运算。每次使用一堆数组的不同元素(somenum,othernum等)时,所有这些数组的长度都相同。

没有一行代码会花费很多时间(配置文件时,每行花费的时间可以忽略不计),但是所有程序花费的时间都比我想要的要长。 我可以期望通过用c ++重写该路由并从vb.net引用它来显着提高速度吗?

编辑#1 -评论中问题的答案

代码每个数组元素花费的时间可以忽略不计,但是大约有20,000个元素,而我需要这样做大约10,000次(所以2亿次-不开玩笑)。总的来说,根据完成一小部分工作所需的时间,我估计大约需要18个小时。整个程序也需要多次运行,尽管每次新运行都是100%独立的。我已经尝试对代码进行线程化,我有一个Ryzen 1800x 8核(16线程)处理器-我已经尝试将任务拆分为15个线程(为开销和其他活动留出1个线程),并使用parallel.for循环还没有提供足够的增长。我不知道什么是AVX,但我将开始研究它,我从未编写过C ++语言,但是数学本身只是简单的方程式,我很乐意花几天/几周/几个月学习实施,如果真的会有所作为!

1 个答案:

答案 0 :(得分:0)

基准化。没有基准测试就无法知道,但是由于C ++的性能概况与诸如VB.NET的托管语言相比,答案很可能是“是”,但是JIT优化,托管到本地的转换,数组访问顺序/数据局部性以及常规编码技术都可以在这里产生影响。