【发布时间】:2012-05-31 20:48:35
【问题描述】:
我为 3D 模拟编写代码,所以我的代码充满了这样的内容:
使用函数可能会导致开销吗?为什么?
“a”是一个 3D 指针。
更新
函数定义
double update_a(double a[][JE][KE],...)
{
for(i=1;i<IE;i++){
for(j=1;j<JE;j++){
for(k=1;k<KE;k++){
curl_h=(hz[i][j][k]-hz[i][j-1][k]-hy[i][j][k]+hy[i][j][k-1]);
idxl[i][j][k]=idxl[i][j][k]+curl_h;
a[i][j][k]=gj3[j]*gk3[k]*dx[i][j][k]+gj2[j]*gk2[k]*.5*(curl_h+gi1[i]*idxl[i][j][k]);
}}}
IE=JE=KE=200
哪个更好:
int main()
{
update_a(...)}
或
int main(){
for (i=0; i<200; i++) {
for (j=0; j<200; j++) {
for (k=0; k<200; k++) {
curl_h=(hx[i][j][k]-hx[i][j][k-1]-hz[i][j][k]+hz[i-1][j][k]);
idyl[i][j][k]=idyl[i][j][k]+curl_h;
a[i][j][k]=gi3[i]*gk3[k]*ey[i][j][k]+gi2[i]*gk2[k]*0.5*(curl_h+gj1[j]*idyl[i][j][k]);
}
}
}
}
更新2:
我的确切代码如下所示:
int main()
{
for(n=1;n<100000;n++){
update_a(...);
update_a2(...);
.
.
.
update_a30(...);}}
【问题讨论】:
-
使用函数是什么意思?
-
你能发布替代方案吗?
-
使用函数可能会导致轻微的开销。将局部变量压入栈等
-
澄清一下,函数调用里面到底是什么?函数是调用 a(i,j,k) 上的计算,还是调用整个三重 for 循环?
-
唯一知道的方法是用探查器测试它们。只使用一个函数,因为它最容易维护,如果分析器说这个循环不好然后继续测试不同的编写方式。在那之前,没有人能真正帮助你。投票结束。
标签: c++ performance performance-testing