[英]Dynamically set the initialization, condition, and in/decrementation of for-loops
[英]How to get rid of initialization after first of two for-loops?
我有一个当前处于以下形式的 for 循环
for (i=0; i<N; i++) {
y = 0.;
for (j=0; j<N; j++)
y += ...
}
我想把它改写为
for (i=0; i<N; i++) {
for (j=0; j<N; j++)
y += ...
}
其中 y 在某个先前的点被初始化,使得两个 for 循环被折叠。 有什么办法可以做到这一点吗? 这是来自以下 OpenMP 教程第 16.4 节的练习
这与您链接到的代码不同。 原始有y
索引,即,它是一个数组:
for (i=0; i<N; i++) {
y[i] = 0.;
for (j=0; j<N; j++)
y[i] += ...
}
这可以改写为:
for (i=0; i<N; i++)
y[i] = 0.;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
y[i] += ...
}
在您的情况下, y
是标量。 外循环的每次迭代在内循环之前将其值重置为 0。 如果内部循环中没有副作用,则只有外部循环的最后一次迭代计数,您可以简单地摆脱它:
i = N-1;
y = 0.;
for (j=0; j<N; j++)
y += ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.