【发布时间】:2020-06-12 14:47:39
【问题描述】:
我正在尝试使用 OpenMP 优化复杂 for 循环中线程的使用。基本代码如下所示:
for (...) //loop1
{
#pragma omp parallel
{
#pragma omp single
{
//section that needs to be executed only once
}
#pragma omp for
{
for (...) //loop2
{
...
}
}
#pragma omp single
{
//section that needs to be executed only once
}
#pragma omp for
{
for (...) //loop3
{
...
}
}
...
}
}
我的问题是关于线程的创建/销毁,因为这段代码意味着每次迭代都会创建和销毁 N 个线程。有没有办法告诉运行时重用相同的线程(类似于线程池),或者这是留给实现的东西?
我需要注意这些限制:
- loop1 的内容可以(并且需要)并发,因为它包含一些相当繁重的科学计算
- loop1 的迭代必须是有序的,所以循环本身不能并行
编辑 loop1 的每次迭代只能执行一次(所以我不能让整个循环并行
【问题讨论】:
-
自从我对stackoverflow.com/questions/25353086/… 发表评论以来,我认为线程创建和销毁的情况并没有发生实质性变化你好。
标签: c multithreading optimization concurrency openmp