由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 有人用Boost.MPI吗?
相关主题
Segmentation fault为啥指针读出的数值十分巨大或者十分小?
请教Intel MPI基本常识C++的一个大问题是裸指针不是对象的身份证
超牛的debugc++ include里的list definition跟boost list不一样
走了,你们慢聊ask for help about AMD cluster
每个请求是用单独的 tcp connection 吗?有人发现最近valgrind有问题么?
How to run a mpi job only on local host??MPI不同进程之间传递指针的一个陷阱
说到cpp11 和 围棋的对比容器里边放指针怎么办?
程序中的各个变量/数组的内存地址是否会混在一起?C++的很多library到底是趋于集中,还是各个公司独自开发,各立山头
相关话题的讨论汇总
话题: 指针话题: 传送话题: gpsvec话题: 容器话题: process
进入Programming版参与讨论
1 (共1页)
y**b
发帖数: 10166
1
能否说说有什么明显的优点?
另外用Boost开发的东西以后会不会有兼容性的问题?
谢谢。
y**b
发帖数: 10166
2
测试了一下,Boost.MPI还挺厉害,对象、指针、数组、容器等等都能有效传送。
传送一个指针会自动传递指针所指对象的内容(用户定义的数据类型只需添加三行
代码实现serialization),传送一个元素为指针类型的容器会将所有指针指向的
内容进行传送。
下面这段代码传送一个元素类型为指针的容器:
if (world.rank() == 0) { // process 0
std::vector GpsVec;
// fill this GpsVec with pointers
world.send(1, tag, GpsVec); // send to process 1
}
else (world.rank() == 1) { // process 1
std::vector rGpsVec;
world.recv(0, tag, rGpsVec); // receive from process 0
std::vector::iterator it;
for (it = rGpsVec.begin(); it != rGpsVec.end(); ++it) {
(*it)-> display();
}
for (it = rGpsVec.begin(); it != rGpsVec.end(); ++it) {
delete (*it); // release memory of gps_position in heap
}
上面的检测显示该容器成功从一个计算节点传送到另一个计算节点。
但有个问题就是在接收端重新自动构建的指针可能形成内存泄漏,
最后两行代码进行手工释放。不知有没有自动释放的功能。

【在 y**b 的大作中提到】
: 能否说说有什么明显的优点?
: 另外用Boost开发的东西以后会不会有兼容性的问题?
: 谢谢。

y**b
发帖数: 10166
3
花了两个月时间利用boost.mpi实现一个需要传送指针和对象的大型数值模拟项目,
在supercomputer上面运行一段时间后出现segfault,折腾了一个多星期,最后升
级到boost-1.50就没事了,看来boost.mpi还是有bug的。
用valgrind检测openmpi和boost-openmpi能报出来一堆令人恐怖的内存错误,但是
都是假错,这里第13条有说明:
http://www.open-mpi.org/faq/?category=debugging#memchecker_how
可能是由调整TCP header引起的:
http://www.open-mpi.org/community/lists/users/2007/05/3193.php
所有合成MPI数据类型都有这个问题:
https://svn.boost.org/trac/boost/ticket/2586
需要抑制报错的话:
http://www.open-mpi.org/community/lists/users/2009/06/9572.php
http://valgrind.org/docs/manual/manual-core.html#manual-core.su

【在 y**b 的大作中提到】
: 测试了一下,Boost.MPI还挺厉害,对象、指针、数组、容器等等都能有效传送。
: 传送一个指针会自动传递指针所指对象的内容(用户定义的数据类型只需添加三行
: 代码实现serialization),传送一个元素为指针类型的容器会将所有指针指向的
: 内容进行传送。
: 下面这段代码传送一个元素类型为指针的容器:
: if (world.rank() == 0) { // process 0
: std::vector GpsVec;
: // fill this GpsVec with pointers
: world.send(1, tag, GpsVec); // send to process 1
: }

l*********s
发帖数: 5409
4
thanks.
1 (共1页)
进入Programming版参与讨论
相关主题
C++的很多library到底是趋于集中,还是各个公司独自开发,各立山头每个请求是用单独的 tcp connection 吗?
求建议:C++的TCP/IP编程库How to run a mpi job only on local host??
C++ Boost怎么样,好用吗?说到cpp11 和 围棋的对比
boost vs C++11程序中的各个变量/数组的内存地址是否会混在一起?
Segmentation fault为啥指针读出的数值十分巨大或者十分小?
请教Intel MPI基本常识C++的一个大问题是裸指针不是对象的身份证
超牛的debugc++ include里的list definition跟boost list不一样
走了,你们慢聊ask for help about AMD cluster
相关话题的讨论汇总
话题: 指针话题: 传送话题: gpsvec话题: 容器话题: process