summaryrefslogtreecommitdiff
path: root/libgfortran/caf/mpi.c
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2011-05-06 18:35:00 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2011-05-06 18:35:00 +0000
commit84deca68acbb6725d98b1a18f9631cb0fea7a122 (patch)
tree1afaa1e180693afcdcb19e2fe41817bef8308c16 /libgfortran/caf/mpi.c
parent33d43ac01719b79eb19b4f3fb94373705c51e4cb (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.c44
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