[英]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.