gpt4 book ai didi

c++ - 将带有迭代器的 C++ 程序转换为 Boost MPI 并行程序

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:39 25 4
gpt4 key购买 nike

我很难思考如何将我的程序变成并行程序(我以前从未这样做过)。基本上,我有一个数据集(它是一个对象 vector ),我从中提取了一组集群,其中每个集群都有一个迭代器 vector ,每个迭代器都指向数据集上的原始位置。

我想做的是让创建集群的过程并行化,然后将所有集群发送回主线程。问题是我正在使用 boost 来序列化所有内容并通过 MPI 发送它,但它不会序列化迭代器。我想简单地使用指向数据集的指针而不是迭代器,但是我需要做一些事情,以便当集群被发送回主线程时,主线程使每个指向新创建的对象的指针都指向数据集vector 代替(然后删除旧对象),我不认为这是一个很好的解决方案,我也想不出一个快速的方法来做到这一点。

这只是第一部分,之后我需要再次将集群发送给线程,以便它们可以进行一些其他计算,因此收集集群的过程不会太慢。

谢谢

最佳答案

我前段时间找到了一个解决方案,答案非常简单。问题是分区有一个簇 vector ,而簇有一个 vector ,指针指向数据集对象,所以我无法将分区发送到其他处理器。解决方案是简单地创建另一种简单的方法来用整数数组表示分区。为此,我创建了一个具有数据集大小的 int 数组,并在数组的每个位置中放置了它所属的集群的索引。因此,如果对象 10 属于分区的簇数组中索引为 3 的簇,我将 3 放在位置 10。现在我只需发送数据集和此数组,并在必要时在另一侧重新创建簇(我可以这样做是因为每个对象只在一个集群上)。

这个解决方案有点明显(不知道我以前怎么没有考虑过),我怀疑这个特定的解决方案是否会对其他人有所帮助,但也许它会帮助其他人意识到您可以在其他更简单的平台上表示数据序列化不起作用时通过 MPI 发送的方法。

关于c++ - 将带有迭代器的 C++ 程序转换为 Boost MPI 并行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com