假设一个 SIZE=128Mb 的数组arr
,其值从 0 到 128Mb-1。现在假设以下代码:
#pragma omp parallel num_threads(NUM_THREADS)
{
int me = omp_get_thread_num();
odds_local[me] = 0;
int count = 0;
#pragma omp for
for (int i = 0; i < SIZE; i++)
if (arr[i]%2 != 0)
count++;
odds_local[me] = count;
}
最后是一个循环,迭代 的值odds_local[me]
以获得最终结果。为此,如果我在 Linux 中计时并报告用户时间,我会得到 1 个线程和 2 个线程的 0.97 秒。也就是说,没有任何加速。
我应该在这个程序中改进什么以提高速度吗?谢谢。