簡體   English   中英

使用帶有4個for循環的openmp進行並行化

[英]Parallelizing using openmp with 4 for loops

我正在嘗試使用openmp並行化我的代碼。 除了一部分,我已經設法並行處理了大部分代碼。 據我所知,以下部分無法並行處理,但我認為有不同的看法。 任何建議,將不勝感激。 如果可能的話,內部的2個for循環可以並行化,那就太好了。

for (o = 0; o < octaves; ++o)
  for ( i = 0; i <= 1; ++i)
    {
      b = responseMap.at(filter_map[o][i]);
      m = responseMap.at(filter_map[o][i+1]);
      t = responseMap.at(filter_map[o][i+2]);

      // loop over middle response layer at density of the most 
      // sparse layer (always top), to find maxima across scale and space

      for ( r = 0; r < t->height; ++r)
        {
          for (c = 0; c < t->width; ++c)
            {
              if (isExtremum(r, c, t, m, b))
                {
                  interpolateExtremum(r, c, t, m, b);
                }
            }
        }
    }

好,讓我們在這里看到: rc是循環內的局部變量。 對於內部循環, tmb似乎是只讀共享狀態。 如果isExtremuminterpolateExtremum是純函數(它們不會產生副作用),則可以安全地在內部循環上拍一個parallel for

  #pragma omp parallel for private(r, c)
  for ( r = 0; r < t->height; ++r)
    {
      for (c = 0; c < t->width; ++c)
        {
          if (isExtremum(r, c, t, m, b))
            {
              interpolateExtremum(r, c, t, m, b);
            }
        }
    }

暫無
暫無

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

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