簡體   English   中英

使用OpenMP通過c ++列表/迭代器並行處理兩個for循環

[英]Parallelize two for loops through c++ list/iterator using OpenMP

我想使用OpenMP並行化以下結構:

for (auto it = data.begin(); it != data.end(); ++it)
{
   for (vector<my_element>::iterator it2 = it->begin(); it2 != it->end(); ++it2)
   {
       // code here (it2->process)
   }
}

我嘗試了不同的方法,但無法使其正常工作。 你可以幫幫我嗎?。

我正在使用gcc 5.3.0,OpenMP 4.0。 到目前為止,我嘗試過但沒有成功的解決方案是:

解決方案1:

#pragma omp parallel
#pragma omp single
{
   for (auto it = data.begin(); it != data.end(); ++it)
   {
   #pragma omp task firstprivate(it)
       for (vector<my_element>::iterator it2 = it->begin(); it2 != it->end(); ++it2)
       {
          // code here (it2->process)
       }
   #pragma omp taskwait
   }
}

解決方案2:

#pragma omp parallel
{
   for (auto it = data.begin(); it != data.end(); ++it)
   {
      #pragma omp single nowait
      {
          for (vector<my_element>::iterator it2 = it->begin(); it2 != it->end(); ++it2)
          {
             // code here (it2->process)
          }
      }
   }
}

我認為您不應致電omp taskwait

#pragma omp parallel
{
    #pragma omp single
    {
        for (auto it = data.begin(); it != data.end(); ++it)
        {
        #pragma omp task firstprivate(it)
            for (vector<my_element>::iterator it2 = it->begin(); it2 != it->end(); ++it2)
            {
            // code here (it2->process)
            }
        }
     }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM