parallel / 8-2010
.pdf#:
int MPI_Attr_put(MPI_Comm comm, int keyval, void* attribute)
MPI_Attr_put(comm, keyval, attribute, ierr)
attribute, %
MPI_Attr_get.
keyval.
#:
int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute, int *flag)
MPI_Attr_get(comm, keyval, attribute, flag, ierr)
attribute,
keyval. # ,
.
2008
#:
int MPI_Attr_delete(MPI_Comm comm, int keyval)
MPI_Attr_delete(comm, keyval, ierr)
. 0 '
$ delete_fn,
keyval. # comm ,
.
2008
(ex01h.f90)
program main_mpi include 'mpif.h' integer rank, ierr
integer numprocs, newcomm integer key, attr, extra external copy_fun, del_fun logical flag
call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_Keyval_create(copy_fun, del_fun, key, extra, ierr)
ATTR = 120
call MPI_Attr_put(MPI_COMM_WORLD, key, attr, ierr)
call MPI_Attr_get(MPI_COMM_WORLD, key, attr, flag, ierr)
print *, "PROCESS = ", RANK, " BEFORE DUP ATTRIBUTE = ", attr call MPI_Comm_dup(MPI_COMM_WORLD, newcomm, ierr)
2008
call MPI_Attr_get(newcomm, key, attr, flag, ierr)
if (flag) then
print *, "process = ", rank, " after dup attribute = ", attr
end if
call MPI_Comm_free(newcomm, ierr) call MPI_Finalize(ierr)
stop end
2008
subroutine copy_fun(comm, keyval, extra, attr_in, attr_out, flag, ierr)
integer comm, keyval, fuzzy, attr_in, attr_out logical flag
include 'mpif.h' attr_out = attr_in + 1 flag =.true.
ierr = MPI_SUCCESS end
subroutine del_fun(comm, keyval, attr, extra, ierr) integer comm, keyval, attr, extra, ierr
include 'mpif.h' ierr = MPI_SUCCESS
if(keyval /= MPI_KEYVAL_INVALID) then attr = attr - 1
end if return end
2008
1 :
2008
MPI-1 MPI-2.
2008
MPI-1 MPI-2.
$ MPI-2 , %
MPI
.
" ( MPI-1) :
MPI-
;
;
- ;
$ ;
;
% ;
% $ ;
.
2008
2008
MPI-
MPI-1
$ . /
, , « »
. - MPI-2. 2 ( )
. #
.
2008
