Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在分解嵌套循环时,速度会惊人地减慢_Loops_For Loop_Nested - Fatal编程技术网

Loops 在分解嵌套循环时,速度会惊人地减慢

Loops 在分解嵌套循环时,速度会惊人地减慢,loops,for-loop,nested,Loops,For Loop,Nested,为了加速我的并行代码,它涉及许多两级嵌套循环 我创建了一个整数数组,并按循环的顺序存储循环的索引,因此两级嵌套循环变成了一级大循环,以减少开销 k = 0; for (int i=0;i<n;++i) { for (int j=0;j<n;++j) { index[k][0] = i; index[k][1] = j; } } k=0; 对于(int i=0;i循环并不昂贵。在循环内执行的操作非常昂贵。您创建了一个新的循环,该循环运行i*j次,因此最终执行内部代码的次数相同。因此

为了加速我的并行代码,它涉及许多两级嵌套循环

我创建了一个整数数组,并按循环的顺序存储循环的索引,因此两级嵌套循环变成了一级大循环,以减少开销

k = 0;
for (int i=0;i<n;++i)
{
for (int j=0;j<n;++j)
{
index[k][0] = i;
index[k][1] = j;
}
} 
k=0;

对于(int i=0;i循环并不昂贵。在循环内执行的操作非常昂贵。您创建了一个新的循环,该循环运行i*j次,因此最终执行内部代码的次数相同。因此,您只为内部循环的开销节省了一小部分

你的新代码现在每次迭代都会访问内存。内存很慢。比你已经去掉的for循环的开销要慢得多


这就是为什么新版本比旧版本慢。

为什么第一段代码从不修改
k
#pragma omp for 
for (int i=0;i<n;++i)
{
for (int j=0;j<n;++j)
{
a[i][j] = 2.0*i+3.0;
}
}
#pragma omp for 
for (int k=0;k<n;++k)
{
i = index[k][0];
j = index[k][1];
a[i][j] = 2.0*i+3.0;
}