我会使用 OpenMP 提高这些代码的速度。
for (i = 1; i < length; i++)
{
for (j = 1; j < i; j++)
sum_c += c[j];
c[i] = sum_c + W[i];
sum_c = 0;
}
我尝试使用这些解决方案
for (i = 1; i < length; i++)
{
#pragma omp parallel for num_threads(NTHREADS) reduction(+:sum_c)
for (j = 1; j < i; j++)
sum_c += c[j];
c[i] = sum_c + W[i];
sum_c = 0;
}
但我只增加
的加速length=100000
还有更好的解决方案吗?代码可以重写。
您使用内循环重复工作很多。通过以下单循环可以获得相同的结果。
sum_c = 0;
for (i = 1; i < length; i++)
{
c[i] = sum_c + W[i];
sum_c += c[i];
}