[英]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);
}
}
}
}
好,讓我們在這里看到: r
和c
是循環內的局部變量。 對於內部循環, t
, m
和b
似乎是只讀共享狀態。 如果isExtremum
和interpolateExtremum
是純函數(它們不會產生副作用),則可以安全地在內部循環上拍一個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.