问题标签 [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.
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 次!
提前感谢任何可以解释这一点的人。
艾伦
boost - Boost.MPI 与 Boost.Asio
再会!
这些库有什么区别?
我阅读了 MPI 的文档并且对 asio 有一点经验。对我来说,这是网络通信的不同实现方式,仅此而已。
但是它们中的每一个都引入了不同的抽象(我不确定这些抽象的相同级别),这导致了不同的应用程序设计。
我什么时候应该使用一个或另一个库?在每种不同的情况下选择正确的决定我必须知道什么?
是的,Asio 适用于多个节点(通常是非常通用的框架),但为什么 MPI 对此类任务不太好?我不认为对 MPI C 库的依赖是限制性的,或者 MPI 很难理解,那么可伸缩性呢?使用 Asio,我们可以实现广播和其他功能,另一方面 MPI 并不禁止编写简单的网络应用程序。如果需要,用 MPI 重写特定于 Asio 的逻辑在概念上是否困难?
类似套接字的通信呢:如果它是强制性的,我们可以在 Asio 或任何其他框架的模块中封装这样一个,并且仍然使用 MPI 进行其他通信。
对我来说,sokets 和 MPI 标准是不同的网络服务,不清楚在现实世界中什么是基本的,从简单的客户端-服务器对到一些中等计算的距离只是一步。另外,我认为 MPI 与 Asio 相比没有显着的开销。
也许这是个坏问题,而我们所需要的只是 ICE(互联网通信引擎)之类的东西?不同的语言支持并再次(确保 ZeroC)出色的性能。
而且,当然,我从未在任何文档主题中看到过“不要为此使用这个库!”。
我根本无法忍受这种不统一:一种情况是套接字,另一种情况是异步消息,最后是重型中间件平台。开发生命周期的清晰度在哪里?也许这不是一个公平的问题,但为了开始减少这个动物园,我们需要一些要点。
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 这方面没有经验。
c++ - 我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?
我正在使用 Boost.MPI 在进程之间交换消息。每条消息都带有我的一个类,使用 Boost.Serialization 进行序列化。我还使用相同的序列化代码将该类保存到文件中。我需要通过 MPI 发送的内容小于我需要保存到文件的内容(相关成员较少)。我在想最好使用序列化库支持的类版本控制来告诉 Boost.MPI 发送类的非默认版本,但我似乎找不到这样做的方法。你知道这是否可能吗?
c++ - MPI:如何限制对文件系统的访问?
我们有基于 4 个集群的 MPI,每个集群有 16 个内核。我们有一个名为notRestricted
. 我们希望限制使用 mpiexec 运行的应用程序对文件系统的访问 - 将其访问权限限制为仅写入我们运行它的一台机器上的那个文件夹。
我们可以将代码注入到我们运行的应用程序中,但这并不是我们真正想要做的......所以我们可以调整的只是 mpi 设置/配置文件,以及我们调用来运行我们的应用程序的 mpiexec 命令。这里的主要问题是“注入 open(2) 的替代品”例如会打开对我们不希望的其他机器 fs 的访问。
那么如何在我们创建的 mpi 集群上限制 mpi 应用程序的权限呢?
注意:这个问题与那个问题有关,但不一样。
c++ - 使用 C++ API 进行多线程
我正在尝试使用 OpenMP 并行我的程序,有时我觉得我走到了死胡同。
我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对类#pragma omp parallel shared(foo)
的数据成员(例如int
,boost::multi_array
和std::vector
)进行处理。例如:在类中的向量数据成员上使用 push_back()。更新 a 的值boost::multi_array
。
我的问题是 OpenMP 是否适合它,或者我应该使用 boost::thread 还是 tbb?或其他...什么支持 C++ API
回复
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?
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)链接?
cmake - cmake:将软件链接到 boost::mpi(使用 mpich2)
对于这个简单的代码(取自 boost-mpi 文档):
对于这样的 CMakeLists.txt:
它找不到 boost_mpi:
但!我已经安装了下一个软件包:
为什么找不到?互联网上有很多例子,人们使用FIND_PACKAGE(Boost 1.4 COMPONENTS mpi REQUIRED)。
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 进行的(这两个任务在同一个节点上)。
任何如何追踪这一点的想法将不胜感激。