【发布时间】:2014-09-15 16:01:57
【问题描述】:
我正在使用sympy.utilities.codegen 生成一些用于数值计算的 C 代码。例如,生成的 C 函数看起来像这样:
double f(double x, double y, double z){
return M_PI*sin(M_PI*x)*sin(M_PI*y) + sin(M_PI*y)*sin(M_PI*z);
}
所以一般来说,我有更大的函数和更多的表达式,这对我的数值计算来说是有问题的。由于我使用 CUDA,因此我的计算寄存器集减少了。我想要做的是将表达式拆分为较小的表达式,并进行一些替换,以便只计算一次昂贵的计算。这是上面代码的示例。
double f(double x, double y, double z){
double sinx = sin(M_PI*x);
double siny = sin(M_PI*y);
double sinz = sin(M_PI*z);
double result;
result = M_PI*sinx*siny;
result += siny*sinz;
return result;
}
所以很明显,对于这个小功能,这种替换并没有得到回报,但总的来说,这是让事情为我服务于更大功能的唯一方法。所以我的问题是,是否有任何简单的内置选项来获得这种行为?对我来说最重要的部分是将计算分成小步骤。我想可以通过一些字符串替换例程来完成替换。
【问题讨论】: