【问题标题】:Turning a C++ program with iterators into a Boost MPI parallel program将带有迭代器的 C++ 程序转换为 Boost MPI 并行程序
【发布时间】:2015-01-30 16:09:03
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 您确定您的意思是 MPI,而不是 OpenMP?您是想在一台多核计算机上使用多个线程,还是在连接在一起的多台计算机上使用多个进程?
  • 抱歉拖了这么久,我以为我会收到电子邮件通知。它是 MPI,具有多台计算机。不确定它是否最适合该项目,但遗憾的是我现在需要坚持下去。我现在解决了这个问题,但是谢谢!

标签: c++ multithreading boost parallel-processing mpi


【解决方案1】:

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

这个解决方案有点明显(不知道我之前是怎么想的),我怀疑这个特定的解决方案会帮助其他人,但也许它会帮助其他人意识到你可以用其他更简单的方式表示数据仅当序列化不起作用时通过 MPI 发送的方法。

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2013-09-19
    • 1970-01-01
    • 2020-04-26
    • 2011-06-06
    • 1970-01-01
    • 2016-08-16
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多