- 积分
- 0
- 注册时间
- 2011-9-30
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2011-10-31 09:22:58
|
显示全部楼层
来自 美国
问题已解决。
mpi可以直接传递对象的数据
相关解释在这里:
http://www.mpi-forum.org/docs/mpi21-report/node337.htm#Node341
附上一个例子:- module mp
- type::typeA
- integer::v1(3)
- double precision::v2(2)
- contains
- procedure::show
- end type
- contains
- subroutine show(this)
- class(typeA)::this
- write(*,*),this%v1,this%v2
- end subroutine
- end module
- program test
- use mp
- use mpi
-
- integer mpiErr,iP,mpiStat(MPI_status_size),mpiLen(2),mpiType(2)
- integer(MPI_address_kind)::mpiDisp(2),mpiBase
- type(typeA)::aa
-
- call MPI_init(mpiErr)
- call MPI_comm_rank(MPI_comm_world,iP,mpiErr)
-
- mpiLen=[3,2]
- mpiType=[MPI_integer,MPI_double_precision]
- call MPI_get_address(aa%v1,mpiDisp(1),mpiErr)
- call MPI_get_address(aa%v2,mpiDisp(2),mpiErr)
- mpiBase=mpiDisp(1)
- mpiDisp(:)=mpiDisp(:)-mpiBase
- call MPI_type_create_struct(2,mpiLen,mpiDisp,mpiType,MPItypeA,mpiErr)
- call MPI_type_commit(MPItypeA,mpiErr)
-
- if(iP==0)then
- aa%v1=[1,2,3]
- aa%v2=[1,2]
- call MPI_send(aa,1,MPItypeA,1,1,MPI_comm_world,mpiErr)
- else
- call MPI_recv(aa,1,MPItypeA,0,1,MPI_comm_world,mpiStat,mpiErr)
- call aa%show
- write(*,*),iP
- end if
-
- call MPI_finalize(mpiErr)
- end program
复制代码 |
|