簡體   English   中英

C ++ OpenMP每個循環中有多個線程

[英]c++ OpenMP multiple threads in each loop

我有一個函數myFunc(),該函數在內部利用OMP循環,但不會消耗所有可用的內核。 在更高的層次上,我在一個循環中多次調用此函數。 是否有一種簡單的方法可以在此外部循環上使用OMP,但不將每個循環傳遞限制到單個線程?

例如:

// I have 24 cores
// Would like to allow each for loop pass to have 12 cores
for (int outIter=0; outIter<2; outIter++) {
    x[outIter] = myFunc(...)  // This function has OMP inside
}

首先,您應該找出myFunc為什么無法耗盡所有24個內核的原因。 通常,您受內存帶寬的限制。 話雖如此,上述循環顯然不是並行的。 您將必須嘗試這樣的事情:

#pragma omp parallel num_threads(2)
{
   myFunc(...);
}

其中myFunc的輸入將是omp_get_thread_num()的函數。 但同樣,不要對能夠實現更多的並行性抱有希望。 如果您的問題受到內存帶寬的限制,那么加速的希望就很小。 您的myFunc大概會發生什么?

暫無
暫無

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

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