簡體   English   中英

將帶有迭代器的C ++程序轉換為Boost MPI並行程序

[英]Turning a C++ program with iterators into a Boost MPI parallel program

我很難思考如何將程序轉換為並行程序(我以前從未做過)。 基本上,我有一個數據集(它是對象的向量),並從它們中提取一組聚類,其中每個聚類都有一個迭代器向量,每個迭代器都指向數據集上的原始位置。

我要做的是使創建群集的過程並行進行,然后將所有群集發送回主線程。 問題是我正在使用boost來序列化所有內容並通過MPI發送它,而沒有序列化迭代器。 我想到了簡單地使用指向數據集的指針而不是迭代器,但是我需要做一些事情,以便在將簇發送回主線程時,主線程使指向新創建對象的每個指針都指向數據集取而代之的是矢量(然后刪除舊對象),我認為這不是一個很好的解決方案,我也無法想到實現此目的的快速方法。

這只是第一部分,在那之后,我將需要再次將集群發送到線程,以便它們可以執行其他一些計算,因此收集集群的過程不應太慢。

謝謝

我前一段時間找到了解決方案,答案確實很簡單。 問題在於,分區具有群集的向量,而群集具有帶有指針的向量來處理數據集對象,因此我無法將分區發送給其他處理器。 解決方案是簡單地創建另一種簡單的方法來用整數數組表示分區。 為此,我創建了一個具有數據集大小的int數組,並在該數組的每個位置內放入了它所屬的簇的索引。 因此,如果對象10屬於該分區的群集數組上索引3的群集,則將3放在位置10上。現在,我只發送數據集和該數組,並在必要時在另一側重新創建群集(我可以這樣做是因為每個對象僅在一個群集上)。

這種解決方案是顯而易見的(不確定我以前沒有怎么想過),我懷疑這種特定的解決方案是否會對其他人有所幫助,但也許會幫助其他人意識到您可以用其他更簡單的方式表示數據當序列化不起作用時,通過MPI發送。

暫無
暫無

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

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