我有一个功能,可以预先计算很多工作。预计算需要大约2000微秒并产生五个数组,其中最大的数组长度为360919,所以显然将它们包含在源代码中是不切实际的。
预计算后,该功能大约需要70微秒,因此我通过预先计算得到了大约30倍的加速。我需要将这个函数调用数百万次(作为蒙特卡罗算法的一部分),所以让它尽可能快地运行显然是有益的。
预先计算必要数组的最佳方法是什么?目前我正在查看以下选项
使用持久变量,并在第一次调用函数时预先计算它们。
使用全局变量,并在调用函数之前初始化它们。
使用类,并在初始化对象时预先计算数组。
所有这些都有一定程度的开销,与明显但不可组合的内联所有内容的解决方案相比,本地变量和预先计算的变量位于同一个工作区中。
是否有其他我错过的解决方案,其开销比上述方法少,但保留了可组合性?是退出C的最佳解决方案吗?
答案 0 :(得分:2)
另一种可能性,我经常使用:使用辅助脚本(m文件)而不是函数。主脚本执行预计算,然后调用辅助脚本。
辅助脚本可以看到调用脚本中定义的所有变量,因此您不需要全局变量或持久变量,这可能会在运行时间方面引入一些开销。
当然,您需要注意辅助脚本中的变量不会覆盖主脚本中不应该包含的任何内容。也就是说,您需要防止两个脚本之间的变量名称发生冲突。