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 | |
|