【发布时间】:2020-04-01 18:57:57
【问题描述】:
我正在求解一个耦合常微分方程系统,在我的程序运行之间,我希望更改要积分的函数。到目前为止,我只是简单地注释和取消注释三个返回语句以在不同的函数之间切换,如下所示:
arma::vec acceleration(arma::vec u, double t)
{ /*
The current acceleration of the system.
*/
// return acceleration_1(u);
// return acceleration_2(u);
return acceleration_3(u);
}
acceleration被多次调用,我想让代码高效,但我也想更改与输入参数集成的函数,而不是通过输入代码的深度来注释和取消- 评论不同的陈述。
如果我要发送一个参数,比如choice,它只能是{1, 2, 3} 之一,并且choice 在程序运行期间永远不会改变,if 语句会减慢我的程序吗?示例:
arma::vec acceleration(arma::vec u, double t, int choice)
{ /*
The current acceleration of the system.
*/
if (choice == 1)
{
return acceleration_1(u);
}
else if (choice == 2)
{
return acceleration_2(u);
}
else if (choice == 3)
{
return acceleration_3(u);
}
}
switch 语句可能更适合(更快)用于此目的吗?任何不会减慢代码速度的替代选项?
编辑:acceleration 和 acceleration_x 是成员函数,它们使具有函数指针的替代解决方案变得困难。
【问题讨论】:
-
你是在每秒调用一百万次吗?您是否对代码进行了性能分析?是性能瓶颈吗?
-
@Eljay 该函数每秒被调用大约 150 万次。我没有对代码进行广泛的分析,只有几个简单的时间。
-
如果您有可能在编译时将
choice设为constexpr,那么您很可能不会受到任何性能损失
标签: c++ optimization scientific-computing