相关疑难解决方法(0)

部分和任务openmp之间的区别

OpenMP之间的区别是什么:

#pragma omp parallel sections
{
    #pragma omp section
    {
       fct1();
    }
    #pragma omp section
    {
       fct2();
    }
}
Run Code Online (Sandbox Code Playgroud)

并且:

#pragma omp parallel 
{
    #pragma omp single
    {
       #pragma omp task
       fct1();
       #pragma omp task
       fct2();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不确定第二个代码是否正确......

c parallel-processing openmp

48
推荐指数
1
解决办法
3万
查看次数

跨职能部门的OpenMP线程团队的持久性

我有一个简单的程序,我用于物理模拟.我想知道如何在OpenMP中实现某种线程范例.

int main()
{
#define steps (100000)
   for (int t = 0;t < steps; t++)
   {
     firstParallelLoop();
     secondParallelLoop();
     if (!(t%100))
     {
        checkpoint();
     }
   }
}
void firstParallelLoop()
{// In another file.c
  #pragma omp parallel for
   for (int i = 0; i < sizeOfSim;i++)
   {
     //Some atomic floating point ops.
   }
}
Run Code Online (Sandbox Code Playgroud)

以前,我使用pthreads并在我的双核笔记本电脑上获得1.7加速.使用OpenMP时,我似乎无法获得任何加速.我怀疑问题是线程组/池正在快速创建和销毁,带来了灾难性的影响.

在我的pthreads实现中,我需要确保没有创建新线程,并且我的程序表现为客户端 - 服务器.在pthreads方案中,main()是一个服务器,并且调用firstParallelLoop将释放触发线程重新处理数据的互斥锁/信号量.

当我看到CPU利用率时,我预计它将超过30%的标记(4核,2是HT),但它保持在27左右......

如何让OpenMP做类似的事情?如何告诉OpenMP重用我的线程?

c gcc openmp

3
推荐指数
1
解决办法
1859
查看次数

标签 统计

c ×2

openmp ×2

gcc ×1

parallel-processing ×1