问题标签 [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.Interprocess - 如何检测进程是否在同一台机器上运行?
所以我使用 boost.mpi 在集群中的 2 台机器上运行我的应用程序,每台机器有 8 个核心。所以我启动了 16 个进程。我想知道我的进程如何找出运行在我的哪些集群上?他们如何以某种方式为机器命名并保存它们?
c++ - 如何使用 Visual Studio 2010 在 Windows 上使用 Open MPI 构建 boost::mpi 库
我安装了 Open MPI 1.5.4(64 位)并尝试使用 bjam 重建 boost 库(1.48)。
我更改了 user-config.jam 文件,通过添加使用带有显式编译器路径的 mpi 行(尽管 mpic++ 已经在 PATH 环境变量中):
然后我尝试从命令提示符运行以下命令:
不幸的是,构建过程仍然需要更多提示。部分错误报告如下所示:
有没有人设法在 Windows 下使用 Open MPI 编译 Boost MPI?我错过了什么吗?
c++ - c ++:MPI通信器作为全局变量
我需要可以在函数/类成员函数中访问 MPI 世界通信器。但是按照设计/惯例,MPI 环境和通信器总是在int main()
.
我能想到的唯一简单的解决方案是使用指向通信器的全局指针。
有人知道更好的方法吗?使用全局指针解决方案是否危险?
这个问题同样适用于准系统 MPI 和 Boost::MPI(我在下面使用)
我提出的解决方案示例(未经测试):
和
c++ - 获取“子”向量和“连接”向量
所以我正在编写一个并行程序(boost.mpi),我想传递一个可以组装成整个向量的向量片段(如在 std::vector 中)。
为了做到这一点,我希望能够做两件事:
抓住一个向量的一部分 - 即假设一个向量有 800 个元素,那么制作一个包含 200-299 元素(或由 2 个 int 变量定义的任意索引)的子向量的最佳方法是什么?
我想创建一个运算符,允许我将向量添加在一起以创建一个新的更长的向量。基本上,我想要 std::plus() (可以连接字符串)提供的相同功能,但对于向量。我需要能够将此运算符作为二元运算符传递(它需要与 std::plus() 具有相同的类型)。
对此的任何帮助将不胜感激。
parallel-processing - 使用 MPI_Barrier() 来提高性能并避免缓冲区问题?
我可以做这样的事情来提高性能并避免我在更高迭代中遇到的缓冲区问题。最大迭代次数 = 6000
c++ - all_reduce 与布尔值
我正在尝试使用 all_reduce 函数从每个处理器收集一个布尔值,如果任何布尔值为真(即“或”运算符),则将它们减少为真。但是我在为此找到正确的语法时遇到问题。我现在拥有的是
当我尝试运行它时,我得到以下编译器错误。
我尝试只使用 ||() 而不是 or(),但这也不起作用。也许我错过了什么?还是我必须采取另一种方法来做到这一点?
c++ - c++ boost MPI & threading - 序列化错误:地址未映射
我难住了。 all_gather
适用于原语(例如int
),但即使对于简单的 STL 容器也失败了。valgrind 声称容器未分配/初始化,但这似乎不对。
总之:
- 我用openMP做一些多线程,然后重新加入线程。
- 在串行中,我尝试
all_gather
简单地std::map
使用`boost::mpi::all_gather。MPI 等级不是线程。(有 2 个 MPI rank,每个 MPI rank 有 4 个线程)。 - 然后我打算做更多(孤立的)多线程。
看起来很简单......这里可能发生了什么?
主文件
Conn_Comp.cpp
valgrind 抱怨vector
ofmap
导致读取无效。但是这vector
是在调用之前立即创建的all_gather
- 所以它显然是在范围内而不是在并行线程区域中。选定的 valgrind 错误输出:
我根据boost help page的推荐使用 MPI_Init_thread 。
正如我在顶部所说,如果我使用原始(即只是uint
)而不是地图,那么all_gather
工作正常。为什么地图会失败? boost serialize
已经有序列化 STL 容器的方法,所以这不是问题......
另请注意,将保存所有值的向量会自动调整大小all_gather
(我检查了实现all_gather
)以容纳所有内容。无论如何,即使我自己初始化它,它仍然失败。
最后,即使我使用一个普通的旧数组(正确分配),例如std::map<uint,uint> *
,我也会遇到同样的问题。
c++ - 如果 recv 和 send 匹配,mpi 请求是否完成
从两个匹配的非阻塞发送和接收操作中仅检查一个请求对象是否足够。
这会很棒,因为这会减少在我的程序中处理请求对象的工作量。
这里有一个 boost mpi 的小例子:
c++ - MPI 收集/减少操作混乱?
在boost 教程中有收集和减少操作的示例。收集的代码如下:
而reduce的例子如下:
在这两个示例中,我们都有一个 if/else 条件,如下所示:
我在这里无法理解的是 if 中的集体操作与 else 中的集体操作之间的区别?参数的数量有所不同,但我不太明白逻辑是如何运作的。
谢谢
libstdc++ - Boost-MPI HelloWorld 编译问题
编辑:已解决,不正确的升压设置 /facepalm
我一直在尝试在旧系统/集群上安装 boost-mpi。
安装 boost 并使用 bjam --with-mpi 后,我尝试编译 boost-mpi 设置教程附带的 hello_world 示例。我使用 mpic++ 为 bjam 提供了 mpi-autoconfig,当我使用以下内容进行编译时:
我收到以下错误:
所以我猜测用bjam构建的时候肯定已经找到了GLIBCXX3.4.9,但是之后
我用了
并且每个只有 3.4.8 作为 GLIBCXX 的最新版本。
我对这个问题感到很困惑。任何帮助表示赞赏!