提高OpenMP计划的绩效

时间:2012-09-04 19:58:08

标签: c linux openmp

假设数组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个线程。也就是说,没有任何加速。

我是否应该在此计划中改进以提高加速效果?感谢。

1 个答案:

答案 0 :(得分:1)

我运行了你的确切代码并且使用1个线程我得到390毫秒,2个我得到190毫秒。您的问题不在代码中。它必须是基本的东西。这些是我能想到的:

  • 未与OpenMP链接(使用g++ filename -fopenmp);
  • 在单核机器上运行;
  • 在双核上运行,其他东西占据另一个核心;
  • 比这个循环计时更多,这是计算的主导。