В попытке ускорить мой параллельный код, который включает много двухуровневых вложенных циклов
Я создал целочисленный массив и сохранил индексы циклов в их порядке, поэтому двухуровневый вложенный цикл стал одним уровнем большого цикла, который должен был уменьшить накладные расходы.
k = 0;
for (int i=0;i<n;++i)
{
for (int j=0;j<n;++j)
{
index[k][0] = i;
index[k][1] = j;
}
}
например:
#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;
}
К моему удивлению код замедлился вместо ускорения, и я не знаю почему?