在OpenMP中使用线程池的性能

时间:2016-04-09 14:34:35

标签: openmp

我有以下代码:

float arr[1000];
for(int j=0; j<1000; ++j)
{
  #pragma omp parallel num_threads(t1)
  {
    #pragma omp for
    for(int i=0; i<1000; ++i) arr[i] = std::pow(i,2);
  }
  #pragma omp parallel num_threads(t2)
  {
    #pragma omp for
    for(int i=0; i<1000; ++i) arr[i] = std::pow(i,2);
  }
}
  • 对于t1 = 1,t2 = 36时间为160
  • 对于t1 = 2,t2 = 36时间是3800
  • 对于t1 = 8,t2 = 36时间是2020
  • 对于t1 = 18,t2 = 36时间是1370
  • 对于t1 = 24,t2 = 36时间是880
  • 对于t1 = 30,t2 = 36时间为450
  • 对于t1 = 36,t2 = 36时间为146

Intel(R)Xeon(R)CPU E5-2699 v3 @ 2.30GHz,每个插槽的核心数:18,虚拟化:VT-x,插槽:2,L1d缓存:32K,L1i缓存:32K,L2缓存:256K ,L3缓存:46080K,CentOS 7,gcc 4.8.3

使用rdtsc或omp_get_wtime函数测量的main for()之前和之后的时间,趋势非常相似。

OpenMP中各个部门(团队)之间的线程池是否有任何问题? 提前谢谢。

0 个答案:

没有答案