有一段代码想利用openmp进行并行,大概示例如下:
class A
{
bool valid;
int num;
B* data;
}
void Func2(B*)
{
…
}
void Func1(A&)
{
#pragma omp parallel for // 位置2
for(int i = 0; i < A.num; ++i)
{
Func2(A.data[i]);
}
}
std::vector<A> vec;
#pragma omp parallel for // 位置1
for(int i = 0; i < vec.size(); ++i)
{
if(vec[i].valid)
{
Func1(vec[i]);
}
}
就是omp的一段指令代码内部调用的函数也使用了omp,目前测试下来只有位置1的起了作用,位置2的没有起到效果,不知道是否是使用不当造成了,如何改进。
另外还想问一下omp的实现是每次for执行都需要重新创建并销毁线程吗?
--
※ 修改:·grainbuds 于 Jul 13 23:55:38 2022 修改本文·[FROM: 101.228.56.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 101.228.56.*]
修改:grainbuds FROM 101.228.56.*
FROM 101.228.56.*