【发布时间】:2015-12-03 02:43:58
【问题描述】:
基本上,我正在进行数百万次非常简单的计算,并尝试存储要在最后打印的最高结果。我正在使用 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%。我现在正在研究递归,并将报告。
【问题讨论】:
-
除了优化计算之外,您还可以可视化进度(带有进度条,具有局部最大值)并在达到/如果达到绝对最大值时停止。
标签: memory optimization language-agnostic cpu-usage