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

标签 c++ multithreading boost parallel-processing mpi

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

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

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

谢谢

最佳答案

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

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

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

相关文章:

c++ - boost::gregorian input_facet 意外结果

c++ - Q_DECLARE_METATYPE 一个 boost::multi_array

c++ - 在SFML中移动矩形,如何让它更平滑?

java - 使用synchronized(obj) 和声明锁之间的区别

c++ - 在 C++ 中,有没有办法让 Child 重用 GrandParent 中定义的纯虚函数的 Parent 类实现

java - Java线程中变量的作用域

c++ - 在一个线程中新建并在另一个线程中删除,不允许吗?

c++ - boost::locale::date_time:如何从 Boost C++ 中的 date_time 对象获取数据?

c++ - SDL_Image 库使程序崩溃或使它们行为不端

c++ - 使用 'new' 时,通过引用返回指针或通过指针本身返回指针有什么区别?