kok*_*ing 5 c++ parallel-processing distribution mpi
我用MPI编写了一个分发层.假设我们有n个数据源和k个数据消费者.在我的方法中,n个MPI进程中的每一个读取数据,然后以给定的方式(逻辑)将其分发给一个(或许多)k个数据消费者(其他MPI进程).
所以它似乎非常通用,我的问题是那样的事情已经完成了吗?
看起来很简单,但可能会非常复杂.假设分布检查哪些数据消费者已准备好工作(动态工作分配).它可以根据给定的算法基于数据分发数据.我有很多可能性,因为我们每个人都不想重新发明轮子.
据我所知,除了 MPI API 本身之外,没有通用的实现。您应该根据问题的限制使用正确的函数。
如果您正在尝试构建一个简单的 n 生产者和 k 消费者同步作业/数据队列,那么当然已经有很多实现(只需 google 一下,您应该会得到一些)。
但是,您呈现的方式似乎非常笼统 - 有时您希望数据仅发送给一个消费者,有时发送给所有消费者,等等。在这种情况下,您应该弄清楚您想要什么以及何时,并使用任一点相应地,点对点通信功能或集体通信功能(当然每个人都必须知道会发生什么 - 你不能让消费者等待来自单个源的数据,而生产者希望广播数据。 .)。
除此之外,我想到的一个实现似乎可以满足您的所有要求:
创建一个同步队列,生产者在一端推送数据,消费者从另一端获取数据(决定队列的各种行为,如您需要 - 队列大小是否受到限制,是否将元素添加到完整队列块或失败,是否从空队列块中删除元素或失败,等等)。
假设数据包含一些标志,告诉消费者该数据是适用于所有人还是仅适用于其中一个人,消费者会查看并删除该元素,或者将其留在那里并注意他们已经这样做了(通过保留其 id在本地,或通过更改数据本身的标志)。
如果您不希望单个集体数据在每个人都处理它之前被阻塞,您可以使用 2 个队列,每种类型的数据一个,消费者一次从其中一个队列获取数据(可以通过每次选择不同的队列,随机选择一个队列,对其中一个队列进行优先级排序,或者按照可以从数据中扣除的某种接受的顺序(例如,首先是最低的id)。
抱歉回答太长,希望对您有所帮助:)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |