簡體   English   中英

使用 OpenMP 的高效並行集合

[英]Efficient parallel union of sets with OpenMP

我需要在 OpenMP 並行程序中計算全局std::set (或等效的全局std::unordered_set )。 目前每個線程都有一個本地std::set ,然后通過使用計算聯合

#pragma omp critical //critical as std container inserting is not thread safe 
global_set.insert(local_set.begin(), local_set.end());

然而,這會創建一個有效的串行代碼部分,其中每個線程一個接一個地將其本地集插入到全局集中。

我如何通過並行化集合的並集來改進這一點? 聯合之前有一大塊工作,有沒有一種方便的方法可以給所有線程不同的工作量,讓其他線程在插入元素時工作? 或者聯合本身可以有效地並行化(例如通過以“二叉樹”方式聯合集合)?

您應該閱讀OpenMP reductions ,尤其是用戶定義的減少。 這讓您可以將問題傳遞給 OpenMP 實現,這很可能會執行樹上的縮減。

當然,這是否有益尚不清楚。 可能是它簡單地引入了很多復制和 memory 分配,這仍然比您顯示的代碼風格慢。

暫無
暫無

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

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