Fix for MPI_WTICK / MPI_WTIME F90 bindings issue. The previous hope
was that declaring the type of MPI_WTICK and MPI_TIME in mpif-common.h would allow the F90 bindings to call through to the back end f77 function and have the right return type. But upon reflection, that's silly -- we were just declaring the variables MPI_WTICK and MPI_WTIME that were of type double precision. Duh. So add some fixed (non-generated) wrapper F90 functions to call the back-end *C* MPI_WTICK and MPI_TIME functions (vs. the back end *F77* functions). We have to call the back-end C functions because there's a name conflict if we try to call the back-end F77 functions -- for the same reasons that we can't "implicitly" define MPI_WTIME and MPI_WTICK in the f90 module, we can't call such an implicitly-defined function. So we had to add new back-end C functions that are directly callable from Fortran, the easiest implementation of which was to provide 4 one-line functions for each (rather than muck around with weak symbols). This commit was SVN r10448.
Этот коммит содержится в:
родитель
365c81d6e9
Коммит
720f38efc5
@ -450,9 +450,3 @@
|
||||
parameter (MPI_MAXLOC=11)
|
||||
parameter (MPI_MINLOC=12)
|
||||
parameter (MPI_REPLACE=13)
|
||||
|
||||
!
|
||||
! double precision functions
|
||||
!
|
||||
double precision MPI_WTIME, MPI_WTICK , PMPI_WTICK, PMPI_WTIME
|
||||
|
||||
|
@ -75,3 +75,5 @@
|
||||
! double precision functions
|
||||
!
|
||||
external MPI_WTIME, MPI_WTICK, PMPI_WTICK, PMPI_WTIME
|
||||
double precision MPI_WTIME, MPI_WTICK, PMPI_WTICK, PMPI_WTIME
|
||||
|
||||
|
@ -64,6 +64,7 @@ headers = \
|
||||
libmpi_f77_la_SOURCES = \
|
||||
constants_f.c \
|
||||
attr_fn_f.c \
|
||||
f90_accessors.c \
|
||||
strings.c \
|
||||
test_constants_f.c
|
||||
|
||||
|
90
ompi/mpi/f77/f90_accessors.c
Обычный файл
90
ompi/mpi/f77/f90_accessors.c
Обычный файл
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include "ompi_config.h"
|
||||
|
||||
#include "ompi/mpi/f77/bindings.h"
|
||||
|
||||
/* These functions solely exist so that the F90 bindings can call a C
|
||||
function from Fortran, so we provide all 4 variants. Specifically,
|
||||
the F90 bindings for MPI_WTICK and MPI_WTIME need to call the
|
||||
back-end C functions to effect the functionality -- they cannot
|
||||
call the back-end F77 functions because there is an overload of
|
||||
names and types. So we create these new functions with different
|
||||
names (MPI_WTICK_F90 and MPI_WTIME_F90 vs. MPI_WTICK and MPI_WTIME)
|
||||
so that the F90 bindings can call these functions directly.
|
||||
|
||||
Rather than try to be clever with weak symbols, especially since
|
||||
the function implementations are 1 line long, it just seemed
|
||||
simpler to provide 4 copies of each [1 line] function. */
|
||||
|
||||
void MPI_WTIME_F90(double *w);
|
||||
void mpi_wtime_f90(double *w);
|
||||
void mpi_wtime_f90_(double *w);
|
||||
void mpi_wtime_f90__(double *w);
|
||||
|
||||
void MPI_WTICK_F90(double *w);
|
||||
void mpi_wtick_f90(double *w);
|
||||
void mpi_wtick_f90_(double *w);
|
||||
void mpi_wtick_f90__(double *w);
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
void MPI_WTIME_F90(double *w)
|
||||
{
|
||||
*w = MPI_Wtime();
|
||||
}
|
||||
|
||||
void mpi_wtime_f90(double *w)
|
||||
{
|
||||
*w = MPI_Wtime();
|
||||
}
|
||||
|
||||
void mpi_wtime_f90_(double *w)
|
||||
{
|
||||
*w = MPI_Wtime();
|
||||
}
|
||||
|
||||
void mpi_wtime_f90__(double *w)
|
||||
{
|
||||
*w = MPI_Wtime();
|
||||
}
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
void MPI_WTICK_F90(double *w)
|
||||
{
|
||||
*w = MPI_Wtick();
|
||||
}
|
||||
|
||||
void mpi_wtick_f90(double *w)
|
||||
{
|
||||
*w = MPI_Wtick();
|
||||
}
|
||||
|
||||
void mpi_wtick_f90_(double *w)
|
||||
{
|
||||
*w = MPI_Wtick();
|
||||
}
|
||||
|
||||
void mpi_wtick_f90__(double *w)
|
||||
{
|
||||
*w = MPI_Wtick();
|
||||
}
|
||||
|
@ -165,7 +165,9 @@ small_sources = \
|
||||
mpi_testall_f90.f90 \
|
||||
mpi_testsome_f90.f90 \
|
||||
mpi_waitall_f90.f90 \
|
||||
mpi_waitsome_f90.f90
|
||||
mpi_waitsome_f90.f90 \
|
||||
mpi_wtick_f90.f90 \
|
||||
mpi_wtime_f90.f90
|
||||
|
||||
medium_sources = \
|
||||
mpi_address_f90.f90 \
|
||||
|
@ -53,6 +53,29 @@ EOF
|
||||
fi
|
||||
}
|
||||
|
||||
# A few hard-coded functions that cannot pass through to the F77
|
||||
# equivalents
|
||||
|
||||
start MPI_Wtick small
|
||||
cat <<EOF
|
||||
|
||||
function MPI_Wtick()
|
||||
double precision MPI_Wtick
|
||||
end function MPI_Wtick
|
||||
|
||||
EOF
|
||||
end MPI_Wtick
|
||||
|
||||
start MPI_Wtime small
|
||||
cat <<EOF
|
||||
|
||||
function MPI_Wtime()
|
||||
double precision MPI_Wtime
|
||||
end function MPI_Wtime
|
||||
|
||||
EOF
|
||||
end MPI_Wtime
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
output_1() {
|
||||
|
@ -649,6 +649,29 @@ fi
|
||||
output=1
|
||||
allranks="0 $ranks"
|
||||
|
||||
# A few hard-coded functions that cannot pass through to the F77
|
||||
# equivalents
|
||||
|
||||
start MPI_Wtick small
|
||||
cat <<EOF
|
||||
|
||||
function MPI_Wtick()
|
||||
double precision MPI_Wtick
|
||||
end function MPI_Wtick
|
||||
|
||||
EOF
|
||||
end MPI_Wtick
|
||||
|
||||
start MPI_Wtime small
|
||||
cat <<EOF
|
||||
|
||||
function MPI_Wtime()
|
||||
double precision MPI_Wtime
|
||||
end function MPI_Wtime
|
||||
|
||||
EOF
|
||||
end MPI_Wtime
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# Helper functions
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user