假设数组arr
的SIZE = 128Mb,值为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中报告用户时间,我会得到0.97s的1个线程和2个线程。也就是说,没有任何加速。
我是否应该在此计划中改进以提高加速效果?感谢。
答案 0 :(得分:1)
我运行了你的确切代码并且使用1个线程我得到390毫秒,2个我得到190毫秒。您的问题不在代码中。它必须是基本的东西。这些是我能想到的:
g++ filename -fopenmp
);