【问题标题】:When running MPI is there a way to execute sequential code first and then run the parallel code运行 MPI 时,有没有办法先执行顺序代码,然后运行并行代码
【发布时间】:2018-12-01 09:35:20
【问题描述】:

我正在编写代码,我需要初始化变量并顺序执行一系列任务,并且只执行一次。之后,我目前正在使用 pthreading 运行并行进程,然后返回到顺序代码对数据进行排序并执行二进制搜索。并行进程只是同时从多个(大约 35 个)套接字进行多次读取。我被要求使用 MPI 实现相同的设置,我目前的理解是,如果我使用 MPI,每个单独的进程都将执行整个程序,并且并行处理不限于放置 MPI_Init_thread 和 MPI_Finalize 的行。我的理解正确吗?或者有没有办法在使用 MPI 时在并行代码之前和之后执行顺序代码?

【问题讨论】:

  • 你的理解是正确的。您可以添加几行代码并仅在等级 0 上执行某些工作(请记住,其他 MPI 任务仍然存在并且可能正在旋转)。另一种方法是启动 1 个 MPI 任务,然后在需要额外 MPI 任务以实现并行性时MPI_Comm_spawn()。请记住MPI_Comm_spawn() 语义不是很直观,如果您在资源管理器下运行,这可能效果不佳,因此从所有 MPI 任务开始是最简单的选择。

标签: sockets parallel-processing pthreads mpi


【解决方案1】:
  • 在调用其他 MPI 例程之前调用 MPI_Init。它的 目的是初始化 MPI 环境。
  • MPI_Finalize 在计算结束时调用,它 执行各种清理任务以终止 MPI 环境。
  • MPI_Init 还会去除任何与 MPI 相关的命令行参数。

如果你想执行顺序代码,你可以这样做

 if (myrank == 0){ 
 //code
 }

主线程(id = 0)将单独执行代码,因此您将不会在该位置出现并行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多