问题标签 [boost-mpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2108 浏览

c++ - Boost.MPI:收到的不是发送的!

我对使用 Boost MPI 比较陌生。我已经安装了库,代码编译了,但是我遇到了一个非常奇怪的错误——从节点接收到的一些整数数据不是主节点发送的。到底是怎么回事?

我正在使用 boost 版本 1.42.0,使用 mpic++ 编译代码(它在一个集群上包装 g++,在另一个集群上包装 icpc)。下面是一个简化的示例,包括输出。

代码:

在 21 个节点(1 个主节点,20 个从节点)上运行它会产生:

因此,当主节点发送 0 到节点 1、1 到节点 2、2 到节点 3 等时,大多数从节点(出于某种原因)接收到数字 19。因此,与其生成从 0 到 19 的数字的平方,我们得到 0 平方、1 平方和 19 平方 18 次!

提前感谢任何可以解释这一点的人。

艾伦

0 投票
2 回答
1774 浏览

boost - Boost.MPI 与 Boost.Asio

再会!

这些库有什么区别?

我阅读了 MPI 的文档并且对 asio 有一点经验。对我来说,这是网络通信的不同实现方式,仅此而已。

但是它们中的每一个都引入了不同的抽象(我不确定这些抽象的相同级别),这导致了不同的应用程序设计。

我什么时候应该使用一个或另一个库?在每种不同的情况下选择正确的决定我必须知道什么?

是的,Asio 适用于多个节点(通常是非常通用的框架),但为什么 MPI 对此类任务不太好?我不认为对 MPI C 库的依赖是限制性的,或者 MPI 很难理解,那么可伸缩性呢?使用 Asio,我们可以实现广播和其他功能,另一方面 MPI 并不禁止编写简单的网络应用程序。如果需要,用 MPI 重写特定于 Asio 的逻辑在概念上是否困难?

类似套接字的通信呢:如果它是强制性的,我们可以在 Asio 或任何其他框架的模块中封装这样一个,并且仍然使用 MPI 进行其他通信。

对我来说,sokets 和 MPI 标准是不同的网络服务,不清楚在现实世界中什么是基本的,从简单的客户端-服务器对到一些中等计算的距离只是一步。另外,我认为 MPI 与 Asio 相比没有显着的开销。

也许这是个坏问题,而我们所需要的只是 ICE(互联网通信引擎)之类的东西?不同的语言支持并再次(确保 ZeroC)出色的性能。

而且,当然,我从未在任何文档主题中看到过“不要为此使用这个库!”。

我根本无法忍受这种不统一:一种情况是套接字,另一种情况是异步消息,最后是重型中间件平台。开发生命周期的清晰度在哪里?也许这不是一个公平的问题,但为了开始减少这个动物园,我们需要一些要点。

0 投票
2 回答
795 浏览

c++ - 使用 Boost 为 MPI 设计共享内存

我想问一下是否有人知道针对初学者的boost::mpi文档?(我已经从 Internet 站点阅读了 Boost.MPI 文档)。

关于我的系统,我有一个大约 90 节的 claster,每个节有两个 CPU,两个内核(共 4 个内核)和 4Gb 内存。

我想为每个结定义共享内存并在那里存储一个向量std::vector<bool> occupation;。然后每个进程需要根据他的rank()数字计算一些东西。

现在,所有的多进程需要等到所有的核都完成计算,然后发送一个向量 ,std::vector<uint32_t> remove;到主进程(rank() == 0),主进程将更新向量occupation,然后将新occupation向量发送给所有节点。

可能最好简单地使用mpi.h而不是boost::mpi.

我想听听您的意见,因为我在 MPI 这方面没有经验。

0 投票
1 回答
281 浏览

c++ - 我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?

我正在使用 Boost.MPI 在进程之间交换消息。每条消息都带有我的一个类,使用 Boost.Serialization 进行序列化。我还使用相同的序列化代码将该类保存到文件中。我需要通过 MPI 发送的内容小于我需要保存到文件的内容(相关成员较少)。我在想最好使用序列化库支持的类版本控制来告诉 Boost.MPI 发送类的非默认版本,但我似乎找不到这样做的方法。你知道这是否可能吗?

0 投票
2 回答
110 浏览

c++ - MPI:如何限制对文件系统的访问?

我们有基于 4 个集群的 MPI,每个集群有 16 个内核。我们有一个名为notRestricted. 我们希望限制使用 mpiexec 运行的应用程序对文件系统的访问 - 将其访问权限限制为仅写入我们运行它的一台机器上的那个文件夹。

我们可以将代码注入到我们运行的应用程序中,但这并不是我们真正想要做的......所以我们可以调整的只是 mpi 设置/配置文件,以及我们调用来运行我们的应用程序的 mpiexec 命令。这里的主要问题是“注入 open(2) 的替代品”例如会打开对我们不希望的其他机器 fs 的访问。

那么如何在我们创建的 mpi 集群上限制 mpi 应用程序的权限呢?

注意:这个问题与那个问题有关,但不一样。

0 投票
1 回答
520 浏览

c++ - 使用 C++ API 进行多线程

我正在尝试使用 OpenMP 并行我的程序,有时我觉得我走到了死胡同。

我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对类#pragma omp parallel shared(foo)的数据成员(例如intboost::multi_arraystd::vector)进行处理。例如:在类中的向量数据成员上使用 push_back()。更新 a 的值boost::multi_array

我的问题是 OpenMP 是否适合它,或者我应该使用 boost::thread 还是 tbb?或其他...什么支持 C++ API

回复

0 投票
1 回答
290 浏览

boost - install Boost.MPI in a directory without administration privileges

How can I install Boost.MPI in my home directory without having any administrative privileges on the Unix system I am working on?

0 投票
1 回答
3674 浏览

c++ - 使用英特尔 MPI 构建 Boost.MPI

我正在尝试使用 Intel MPI 4.0.0.012 构建 Boost.MPI 1.47,但 Boost 无法找到安装。我using mpi ;在 user-config.jam 中尝试了各种 -variants,包括using mpi ;using mpi : mpicl ;using mpi : c:/path/to/mpi/mpicl.bat没有运气。我也尝试过使用using mpi : <find-shared-library>impi ;虽然我不确定<find-shared-library>真正做什么)。

使用using mpi ;我得到:

使用using mpi : mpicc我得到:

using mpi : <find-shared-library>impi ;结果是

如何将 Boost.MPI 与英特尔 MPI(Windows、Visual Studio 2010、x64)链接?

0 投票
1 回答
2283 浏览

cmake - cmake:将软件链接到 boost::mpi(使用 mpich2)

对于这个简单的代码(取自 boost-mpi 文档):

对于这样的 CMakeLists.txt:

它找不到 boost_mpi:

但!我已经安装了下一个软件包:

为什么找不到?互联网上有很多例子,人们使用FIND_PACKAGE(Boost 1.4 COMPONENTS mpi REQUIRED)

0 投票
0 回答
140 浏览

multithreading - 什么可能导致 MPI 非阻塞消息的不对称吞吐量?

我正在使用 MPI 非阻塞消息在 2 个任务之间进行通信。通信模式如下:每个任务都有一个从其他任务接收消息的主线程。它有 5 个左右的工作线程来进行计算并向其他任务发送消息。主线程循环,测试传入消息。这是它唯一做的事情。

我的问题是,虽然任务 0 瞬间接收到任务 1 发送的所有信息(发送和接收的消息数量大致匹配),但任务 1 只接收到任务 0 发送的消息的大约 1/4。运行一分钟后,有数百个数以千计的未完成消息。

使用 PAPI,我确定任务 1 似乎阻止了测试和 irecv。指令吞吐量仅为 0.03 instr/cycle,而其他任务则 > 0.2,并且在调试器中停止任务表明它正在尝试获取锁。但是,阻塞的接收和测试不是针对“丢失”消息的,而是针对另一类更罕见的消息。

我意识到如果不实际尝试代码,很难说出可能导致这种情况的原因,但我发现 MPI 性能存在如此不对称令人费解。跟不上接收的任务并不是因为缺乏尝试,它实际上是把所有的时间都花在测试传入的消息上。

我正在使用带有 MPI_THREAD_MULTIPLE 的 OpenMPI 1.5.3,并且通信是通过 sm 进行的(这两个任务在同一个节点上)。

任何如何追踪这一点的想法将不胜感激。