标签: boost-mpi

尝试构建Boost MPI,但不创建lib文件.这是怎么回事?

我试图用Boost MPI运行一个程序,但问题是我没有.lib.所以我尝试按照http://www.boost.org/doc/libs/1_43_0/doc/html/mpi/getting_started.html#mpi.config上的说明创建一个.

指令说"对于许多使用LAM/MPI,MPICH或OpenMPI的用户来说,配置几乎是自动的",我在C:\中得到了自己的OpenMPI,但我没有做更多的事情.我们需要做任何事情吗?我在程序文件中也得到了自己的MPICH2,并且没有做任何更多的事情.在这一点上,我非常不确定我们必须做什么.

除此之外,该指令的另一个声明:"如果您的主目录中还没有文件user-config.jam,请在那里复制tools/build/v2/user-config.jam." 好吧,我只是按照它说的做.我在C:\ boost_1_43_0>中获得了"user-config.jam"以及"使用mpi;" 进入文件.

接下来,这就是我所做的:bjam --with-mpi

C:\boost_1_43_0>bjam --with-mpi
WARNING: No python installation configured and autoconfiguration
         failed.  See http://www.boost.org/libs/python/doc/building.html
         for configuration instructions or pass --without-python to
         suppress this message and silently skip all Boost.Python targets

Building the Boost C++ Libraries.


warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this …
Run Code Online (Sandbox Code Playgroud)

boost build configure boost-mpi

8
推荐指数
1
解决办法
6983
查看次数

Boost.MPI vs Boost.Asio

美好的一天!

这些库有什么区别?

我阅读了MPI的文档,并且对asio有一点经验.对我来说,这是网络通信的不同实现,而不是更多.

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

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

是的,Asio适用于多个节点(一般都是非常通用的框架),但为什么MPI对这些任务不太好?我不认为对MPI C库的依赖性是限制性的,或MPI难以理解,可扩展性如何?使用Asio,我们可以实现广播和其他方面的东西,而另一方面,MPI不禁止编写简单的网络应用程序.如果需要,在概念上难以用MPI重写Asio特定的逻辑吗?

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

对我来说,sokets和MPI标准是不同的网络服务,并不清楚现实世界中的基础是什么,从简单的客户端 - 服务器对到某些中等计算的距离是一步.此外,我认为与Asio相比,MPI的开销并不大.

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

当然,我从来没有在任何文档主题中看到过"不要使用这个库!".

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

boost boost-asio boost-mpi

7
推荐指数
2
解决办法
1682
查看次数

使用boost :: mpi,mpi中的消息大小是否有限制?

我目前正在openMPI上使用boost :: mpi编写模拟,一切都很好.然而,一旦我扩大系统,因此必须发送更大的std :: vectors我得到错误.

我已将问题减少到以下问题:

#include <boost/mpi.hpp>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <boost/serialization/vector.hpp>
#include <iostream>
#include <vector>
namespace mpi = boost::mpi;

int main() {
    mpi::environment env;
    mpi::communicator world;

    std::vector<char> a;
    std::vector<char> b;
    if (world.rank() == 0) {
        for (size_t i = 1; i < 1E10; i *= 2) {
            a.resize(i);
            std::cout << "a " << a.size();
            world.isend(0, 0, a);
            world.recv(0, 0, b);
            std::cout << "\tB " << b.size() << std::endl;
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印出来:

a 1 B …
Run Code Online (Sandbox Code Playgroud)

c++ mpi openmpi boost-mpi

6
推荐指数
1
解决办法
846
查看次数

并行代码文档的哪种图表?

我有一些需要记录的并行代码(使用MPI实现).我想要一个描述它的高级策略的流程图.

您使用什么样的图来描述发送,接收,广播,收集,减少和其他操作?

(编辑:我对Linux/LaTeX软件同样感兴趣)

language-agnostic diagram mpi boost-mpi

5
推荐指数
1
解决办法
171
查看次数

多核编程.Boost的MPI,OpenMP,TBB还是其他什么?

我完全是多核编程的新手,但我知道如何编写C++.

现在,我正在寻找多核编程库.我只想尝试一下,只是为了好玩,现在,我找到了3个API,但我不确定应该坚持哪一个.现在,我看到了Boost的MPI,OpenMP和TBB.

对于任何经历过这3个API(或任何其他API)中的任何一个的人,您能否告诉我这些之间的区别?是否有任何因素需要考虑,如AMD或英特尔架构?

multicore tbb openmp multiprocessing boost-mpi

5
推荐指数
2
解决办法
7186
查看次数

使用C++ API进行多线程处理

我试图使用OpenMP并行我的程序,有时我觉得我达到了死胡同.

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

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

Reagrds

c++ tbb openmp boost-thread boost-mpi

5
推荐指数
1
解决办法
495
查看次数

MPI收集/减少操作混乱?

boost教程中,有一些收集和减少操作的例子.收集代码如下:

#include <boost/mpi.hpp>
#include <iostream>
#include <vector>
#include <cstdlib>
namespace mpi = boost::mpi;

int main(int argc, char* argv[])
{
  mpi::environment env(argc, argv);
  mpi::communicator world;

  std::srand(time(0) + world.rank());
  int my_number = std::rand();
  if (world.rank() == 0) {
    std::vector<int> all_numbers;
    gather(world, my_number, all_numbers, 0);
    for (int proc = 0; proc < world.size(); ++proc)
      std::cout << "Process #" << proc << " thought of "
                << all_numbers[proc] << std::endl;
  } else {
    gather(world, my_number, 0);
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

减少的例子如下:

#include …
Run Code Online (Sandbox Code Playgroud)

c++ boost mpi boost-mpi

5
推荐指数
1
解决办法
4140
查看次数

无法跨两台计算机运行OpenMPI

当试图在boost :: mpi教程中运行第一个例子时,我无法运行两台以上的机器.具体来说,这似乎运行良好:

mpirun -hostfile hostnames -np 4 boost1
Run Code Online (Sandbox Code Playgroud)

主机名中的每个主机名为<node_name> slots=2 max_slots=2.但是,当我将进程数增加到5时,它就会挂起.当我超过2台机器时,我已将slots/ 的数量减少max_slots到1,结果相同.在节点上,它显示在作业列表中:

<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823
Run Code Online (Sandbox Code Playgroud)

另外,当我杀了它时,我收到这条消息:

node2- daemon did not report back when launched
node3- daemon did not report back when launched
Run Code Online (Sandbox Code Playgroud)

设置群集时,可以在NFS安装的驱动器上访问mpiboost库.我是否因为NFS而陷入僵局?或者,还有其他事情发生了吗?

更新: 要清楚,我正在运行的提升程序是

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;

int main(int argc, char* argv[]) …
Run Code Online (Sandbox Code Playgroud)

c++ openmpi boost-mpi

3
推荐指数
1
解决办法
7403
查看次数

Boost.MPI:收到的不是发送的内容!

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

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

码:

#include <iostream>
#include <boost/mpi.hpp>

using namespace std;
namespace mpi = boost::mpi;

class Solution
{
public:
  Solution() :
  solution_num(num_solutions++)
  {
    // Master node's constructor
  }

  Solution(int solutionNum) :
  solution_num(solutionNum)
  {
    // Slave nodes' constructor.
  }

  int solutionNum() const
  {
    return solution_num;
  }

private:
  static int num_solutions;
  int solution_num;
};

int Solution::num_solutions = 0;

int main(int argc, char* argv[])
{
  // Initialization of MPI
  mpi::environment env(argc, argv);
  mpi::communicator world;

  if (world.rank() == 0)
  { …
Run Code Online (Sandbox Code Playgroud)

c++ boost mpi boost-mpi

3
推荐指数
1
解决办法
2022
查看次数

如果recv和send匹配,则mpi请求是否完成

是否足以从两个匹配的非阻塞发送和recv操作中仅检查一个请求对象.

这将是很好的,因为这将减少在我的程序中处理请求对象的工作量.

这里有一个使用boost mpi的小例子:

#include <boost/mpi.hpp>

int main(int argc, char* argv[]) {
    // initialize mpi

    mpi::environment env(argc, argv);
    boost::mpi::communicator world;
    boost::mpi::request req0, req1;
    double blub;
    if(world.rank()==1)
       req1 = world.irecv(0, 23, blub);
    if(world.rank()==0)
       req0 = world.isend(0, 23, blub);

    //now I want to synchronize the processors is this enough?
    req0.wait();
    //or do I also need this line
    req1.wait();

}
Run Code Online (Sandbox Code Playgroud)

c++ mpi boost-mpi

1
推荐指数
1
解决办法
766
查看次数