由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - MPI不同进程之间传递指针的一个陷阱
相关主题
C++子类中调用父类指针的问题关于传递函数指针
Question about type conversion (转载)有人用Boost.MPI吗?
能否通过父类指针来复制子类对象?node怎么和其他进程互相传递消息?
容器里边放指针怎么办?子类的copy constructor怎么写
C++容器放入对象或指针子类的assignment operator 怎么访问父类的private member
弱问c++ iterator 和 pointer区别问个 C++到C的问题
容器中放置智能指针一问还请教一个关于C++的问题
如何查看一个程序/进程使用了哪些cpu?dynamic_cast operator in C++
相关话题的讨论汇总
话题: 指针话题: mpi话题: recvvec话题: 传递话题: 容器
进入Programming版参与讨论
1 (共1页)
y**b
发帖数: 10166
1
标题说是传递指针,实际上是自动传递指针所指对象。
本来MPI传递这类复杂类型(类,含有类的类,含有指针的类,子类,含有类指针
的容器,等等,及其任意组合)是非常麻烦的,但是利用boost.serialization
和boost.mpi,可以轻松传递任意数据类型。
假设sendVec是个含有指针的容器,指针指向某个复杂的类,则
boostWorld.send(0, mpiTag, sendVec); 把这个容器传往主进程0。
主进程通过boostWorld.recv(n, mpiTag, recvVec);接收这个容器,
并自动通过boost.serialization重新生成容器中指针所指的对象,
接收之后recvVec中的指针可以立即投入使用。
一个小小的陷阱就是,使用完recvVec之后,必须手动释放其所含指针
指向的内存,boost无法给用户做这件事。
本来这件事也很明显,但有时候容易疏忽。我的程序在百万次MPI传输后,
主进程使用的内存超过了512GB,超算上的large-memory节点提示OOM,
但是手动释放内存后发现只需要30GB内存。
H**r
发帖数: 10015
2
MPI太可怕了
y**b
发帖数: 10166
3
与其说MPI可怕,倒不如说C++的内存管理机制复杂,
有些情况使用智能指针可能会好些。
但我个人的经验,智能指针在这种非常复杂的内存操作中,
反而不如人工控制方便。
l*******r
发帖数: 55
4
感觉谈不上陷阱,MPI也没法知道什么时候才可以delete,毕竟绝大部分情况下vector
里面都不会存指针的。
我觉得你这种情况,只要养成一个好的习惯,拿到recvVec后立刻转成装unique_ptr的
vector就好了。
w***g
发帖数: 5958
5
不如用老土的C语言套路明白。

【在 y**b 的大作中提到】
: 标题说是传递指针,实际上是自动传递指针所指对象。
: 本来MPI传递这类复杂类型(类,含有类的类,含有指针的类,子类,含有类指针
: 的容器,等等,及其任意组合)是非常麻烦的,但是利用boost.serialization
: 和boost.mpi,可以轻松传递任意数据类型。
: 假设sendVec是个含有指针的容器,指针指向某个复杂的类,则
: boostWorld.send(0, mpiTag, sendVec); 把这个容器传往主进程0。
: 主进程通过boostWorld.recv(n, mpiTag, recvVec);接收这个容器,
: 并自动通过boost.serialization重新生成容器中指针所指的对象,
: 接收之后recvVec中的指针可以立即投入使用。
: 一个小小的陷阱就是,使用完recvVec之后,必须手动释放其所含指针

p***o
发帖数: 1252
6
C语言一个realloc就要搞死不少人 ...

【在 w***g 的大作中提到】
: 不如用老土的C语言套路明白。
w***g
发帖数: 5958
7
realloc有啥问题吗?

【在 p***o 的大作中提到】
: C语言一个realloc就要搞死不少人 ...
p***o
发帖数: 1252
8
太复杂,大多数程序员搞不定或者懒得搞定。

【在 w***g 的大作中提到】
: realloc有啥问题吗?
1 (共1页)
进入Programming版参与讨论
相关主题
dynamic_cast operator in C++C++容器放入对象或指针
请问2个类的问题弱问c++ iterator 和 pointer区别
C++虚方法问题容器中放置智能指针一问
[合集] 问一个design pattern的问题如何查看一个程序/进程使用了哪些cpu?
C++子类中调用父类指针的问题关于传递函数指针
Question about type conversion (转载)有人用Boost.MPI吗?
能否通过父类指针来复制子类对象?node怎么和其他进程互相传递消息?
容器里边放指针怎么办?子类的copy constructor怎么写
相关话题的讨论汇总
话题: 指针话题: mpi话题: recvvec话题: 传递话题: 容器