我目前正在优化数值分析代码。在代码内,有200x150的元素查找表(当前为静态std::vector <std::vector<double>>
),该表在每次运行开始时构建。查找表的构造实际上是非常复杂的-查找表中的值是使用迭代割线方法对一组复杂的方程式构造的。当前,为了进行模拟,查找表的构建是运行时间的20%(运行时间约为25秒,构建查找表需要5秒钟)。尽管5秒似乎并不多,但是在运行我们的MC仿真(我们正在运行50k +仿真)时,它突然变成了很大的时间。
连同其他一些想法一起,已经浮出水面的东西-我们可以在编译时使用模板构造此查找表吗?表本身永远不会改变。对大型数组进行硬编码不是一种可维护的解决方案(不断调整生成表的方程式),但是似乎可以在编译时生成表,这将使我们两全其美(易于维护,运行时无开销)。
因此,我提出了以下(非常简化的)方案。假设您想在编译时生成一个静态数组(使用最适合您的容器-2D c数组, vector 的 vector 等)。您定义了一个函数-
double f(int row, int col);
其中,返回值是表中的条目,row是查找表行,col是查找表列。是否可以使用模板在编译时生成此静态数组,怎么做?
最佳答案
通常,最好的解决方案是代码生成。在那里您拥有所有的自由,并且可以确定输出实际上是double[][]
。