簡體   English   中英

如何有條件地終止OpenMP中的並行區域?

[英]How do I conditionally terminate a parallel region in OpenMP?

我有一個帶有C ++程序的OpenMP。 在並行區域內有包含#pragma omp task的並行區域。 現在,我想知道如何根據任何正在運行的線程滿足的條件來終止並行區域。

#pragma omp parallel
{
 #pragma omp task
 {
   //upon reaching a condition i would like to break out of the parallel region. (all threads should exit this parallel region)
 }

}

您不能過早終止並行構造。 OpenMP對此沒有構造,它指定並行區域可能只有一個出口點(因此沒有分支出該區域...)。

我認為唯一(明智且可移植的)方法是使用一個變量來指示工作是否完成,並讓線程定期檢查該變量(使用原子指令和/或沖洗來確保正確的可見性)。 如果變量指示工作已完成,則線程可以跳過其剩余工作(通過將剩余工作放在if主體中(如果完成工作則不分支))。

可能可以編寫系統特定的代碼,該代碼會掛起其他線程並將它們設置在塊的末尾(例如,操縱堆棧和指令指針...),但這似乎並不明智(這可能很脆弱)。

如果您要告訴我們更多有關您要做什么的信息(以及您為什么需要這樣做),可能會更容易為您提供幫助(例如,提出不需要這樣做的設計)。

暫無
暫無

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

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