在c++类中使用OpenMP

Using OpenMP in c++ class

本文关键字:OpenMP c++      更新时间:2023-10-16

我是OpenMP的新手。我试图在我的c++代码中使用OpenMP。代码太复杂了,所以我把问题简化如下:

class CTet
{
    ...
    void cal_Mn(...);
}
int i, num_tet_phys;
vector<CTet> tet_phys;
num_tet_phys = ...;
tet_phys.resize(num_tet_phys);
#pragma omp parallel private(i)
for (i = 0; i < num_tet_phys; i++)
    tet_phys[i].cal_Mn(...);

我希望for循环可以并行运行,但似乎所有线程都独立运行整个循环。每个线程重复计算。我的代码有什么问题?如何解决这个问题?谢谢你!

6月

Try

#pragma omp parallel for private(i)
for (i = 0; i < num_tet_phys; i++)
  tet_phys[i].cal_Mn(...);

注意parallel for的使用

并使用-fopenmp标志编译。

#pragma omp parallel创建了一组线程,所有这些线程都执行下一条语句(在您的示例中,执行整个for循环)。语句结束后,线程重新合并为一个。

#pragma omp parallel for创建了一组线程,这些线程在它们之间分配for循环的工作。