diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-06 18:35:00 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-06 18:35:00 +0000 |
commit | 84deca68acbb6725d98b1a18f9631cb0fea7a122 (patch) | |
tree | 1afaa1e180693afcdcb19e2fe41817bef8308c16 /libgfortran/caf/mpi.c | |
parent | 33d43ac01719b79eb19b4f3fb94373705c51e4cb (diff) |
2011-05-06 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
* caf/libcaf.h: Cleanup headers.
(_gfortran_caf_critical, _gfortran_caf_end_critical): Make stub.
(caf_register_t): New enum.
(_gfortran_caf_register, _gfortran_caf_deregister): New prototype.
* caf/single.c (_gfortran_caf_critical,
_gfortran_caf_end_critical): Remove.
(_gfortran_caf_register, _gfortran_caf_deregister): New functions.
* caf/mpi.c (_gfortran_caf_critical,
_gfortran_caf_end_critical): Remove.
(_gfortran_caf_register, _gfortran_caf_deregister): New functions.
(caf_world_window): Remove global variable.
(_gfortran_caf_init): Fix off-by-one error of this_image.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173505 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/caf/mpi.c')
-rw-r--r-- | libgfortran/caf/mpi.c | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/libgfortran/caf/mpi.c b/libgfortran/caf/mpi.c index 9e4db916c85f..9b7bb333c228 100644 --- a/libgfortran/caf/mpi.c +++ b/libgfortran/caf/mpi.c @@ -27,8 +27,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "libcaf.h" #include <stdio.h> #include <stdlib.h> +#include <string.h> /* For memcpy. */ #include <mpi.h> + /* Define GFC_CAF_CHECK to enable run-time checking. */ /* #define GFC_CAF_CHECK 1 */ @@ -39,7 +41,6 @@ static void error_stop (int error) __attribute__ ((noreturn)); static int caf_mpi_initialized; static int caf_this_image; static int caf_num_images; -static MPI_Win caf_world_window; /* Initialize coarray program. This routine assumes that no other @@ -58,13 +59,9 @@ _gfortran_caf_init (int *argc, char ***argv, int *this_image, int *num_images) MPI_Init (argc, argv); MPI_Comm_rank (MPI_COMM_WORLD, &caf_this_image); - *this_image = caf_this_image + 1; + *this_image = ++caf_this_image; MPI_Comm_size (MPI_COMM_WORLD, &caf_num_images); *num_images = caf_num_images; - - /* Obtain window for CRITICAL section locking. */ - MPI_Win_create (NULL, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, - &caf_world_window); } @@ -73,13 +70,28 @@ _gfortran_caf_init (int *argc, char ***argv, int *this_image, int *num_images) void _gfortran_caf_finalize (void) { - MPI_Win_free (&caf_world_window); - if (!caf_mpi_initialized) MPI_Finalize (); } +void * +_gfortran_caf_register (ptrdiff_t size, + caf_register_t type __attribute__ ((unused)), + void **token) +{ + *token = NULL; + return malloc (size); +} + + +int +_gfortran_caf_deregister (void **token __attribute__ ((unused))) +{ + return 0; +} + + /* SYNC ALL - the return value matches Fortran's STAT argument. */ int @@ -156,22 +168,6 @@ _gfortran_caf_sync_images (int count, int images[], char *errmsg, } -/* CRITICAL BLOCK. */ - -void -_gfortran_caf_critical (void) -{ - MPI_Win_lock (MPI_LOCK_SHARED, 0, 0, caf_world_window); -} - - -void -_gfortran_caf_end_critical (void) -{ - MPI_Win_unlock (0, caf_world_window); -} - - /* ERROR STOP the other images. */ static void |