基本上,我正在进行数百万次非常简单的计算,并试图将最高结果存储在最后。我正在使用一个C#控制台应用程序,但这很简单,因为它与语言无关(在另一种语言中这会表现得更好吗?)
我有什么:
double output = 0;
//do the calculations
//after each:
if(calculationResult > output) output = calculationResult;
//done with calculations
Console.WriteLine(output);
这样可行,但需要很长时间才能完成。我想过将答案存储在列表中并在计算后对其进行排序,但它在OutOfMemory中崩溃了大约9GB。
比较实时和仅存储一个需要太长时间,但是存储所有并且稍后比较会占用太多内存。有没有办法优化这个?
编辑:我的解决方案是首先通过在到达答案形成的抛物线顶点后继续前进,将计算次数减半。然后我意识到最好的解决方案是重构所有要递归的东西,从低精度和宽范围开始,然后在提高精度的同时缩小范围。使用英特尔的IPP迁移到C ++只能使完成时间减少约8%,而操作减少约99%。我现在正在进行递归,并将报告回来。答案 0 :(得分:2)
正如马修所说,你需要让这个过程更有效率。除了找到更好的算法,这里有一些建议:
看看Intel's site。他们希望您能够利用我赢得的各种原因尽可能多地利用并行性。
答案 1 :(得分:0)
几乎可以肯定,计算步骤的速度很慢,而不是if(calculationResult > output) output = calculationResult;
部分。
我不知道您的特定问题是什么,但通常最有效的方法来查找数百万计算中最重要的方法是仔细考虑您的问题并使用更有效的算法和/或数学让您不要不得不进行数百万次计算。