Changeset 348764


Ignore:
Timestamp:
01/20/11 16:08:26 (3 years ago)
Author:
David Goodell <goodell@…>
Branches:
master
Children:
fc3d5c
Parents:
1ff0c4
Message:

[svn-r7774] refactor MPI_Reduce_local s.t. it has an _impl

This provides a single, simple way to invoke reduction operators from
within the library.

Reviewed by balaji@.

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/include/mpiimpl.h

    r9d40d2 r348764  
    34713471int MPIR_Barrier_inter( MPID_Comm *comm_ptr); 
    34723472 
     3473int MPIR_Reduce_local_impl(void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op); 
     3474 
    34733475int MPIR_Setup_intercomm_localcomm( MPID_Comm * ); 
    34743476 
  • src/mpi/coll/reduce_local.c

    r87af32 r348764  
    2525/* any utility functions should go here, usually prefixed with PMPI_LOCAL to 
    2626 * correctly handle weak symbols and the profiling interface */ 
    27 #endif 
    2827 
    2928#undef FUNCNAME 
    30 #define FUNCNAME MPI_Reduce_local 
     29#define FUNCNAME MPIR_Reduce_local_impl 
    3130#undef FCNAME 
    3231#define FCNAME MPIU_QUOTE(FUNCNAME) 
    33 /*@ 
    34 MPI_Reduce_local - Applies a reduction operator to local arguments. 
    35  
    36 Input Parameters: 
    37 + inbuf - address of the input buffer (choice) 
    38 . count - number of elements in each buffer (integer) 
    39 . datatype - data type of elements in the buffers (handle) 
    40 - op - reduction operation (handle) 
    41  
    42 Output Parameter: 
    43 . inoutbuf - address of input-output buffer (choice) 
    44  
    45 .N ThreadSafe 
    46  
    47 .N Fortran 
    48  
    49 .N collops 
    50  
    51 .N Errors 
    52 .N MPI_SUCCESS 
    53 .N MPI_ERR_COUNT 
    54 .N MPI_ERR_TYPE 
    55 .N MPI_ERR_BUFFER 
    56 .N MPI_ERR_BUFFER_ALIAS 
    57 @*/ 
    58 int MPI_Reduce_local(void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op) 
     32int MPIR_Reduce_local_impl(void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op) 
    5933{ 
    6034    int mpi_errno = MPI_SUCCESS; 
     35    MPID_Op *op_ptr; 
    6136    MPI_User_function *uop; 
    62     MPID_Op *op_ptr; 
    6337#ifdef HAVE_CXX_BINDING 
    6438    int is_cxx_uop = 0; 
    6539#endif 
    6640    MPIU_THREADPRIV_DECL; 
    67     MPID_MPI_STATE_DECL(MPID_STATE_MPI_REDUCE_LOCAL); 
    68  
    69     MPIR_ERRTEST_INITIALIZED_ORDIE(); 
    70  
    71     MPIU_THREAD_CS_ENTER(ALLFUNC,); 
    72     MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_REDUCE_LOCAL); 
    73  
    74     /* Validate parameters */ 
    75 #   ifdef HAVE_ERROR_CHECKING 
    76     { 
    77         MPID_BEGIN_ERROR_CHECKS; 
    78         { 
    79             MPIR_ERRTEST_OP(op, mpi_errno); 
    80             if (mpi_errno) MPIU_ERR_POP(mpi_errno); 
    81  
    82             if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) { 
    83                 MPID_Op_get_ptr(op, op_ptr); 
    84                 MPID_Op_valid_ptr( op_ptr, mpi_errno ); 
    85             } 
    86             if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) { 
    87                 mpi_errno = (*MPIR_Op_check_dtype_table[op%16 - 1])(datatype); 
    88             } 
    89             if (count != 0) { 
    90                 MPIR_ERRTEST_ALIAS_COLL(inbuf, inoutbuf, mpi_errno); 
    91             } 
    92             if (mpi_errno != MPI_SUCCESS) goto fn_fail; 
    93         } 
    94         MPID_END_ERROR_CHECKS; 
    95     } 
    96 #   endif /* HAVE_ERROR_CHECKING */ 
    97  
    98  
    99     /* ... body of routine ...  */ 
    10041 
    10142    if (count == 0) goto fn_exit; 
     
    14283    /* --END ERROR HANDLING-- */ 
    14384 
     85fn_exit: 
     86    return mpi_errno; 
     87fn_fail: 
     88    goto fn_exit; 
     89} 
     90 
     91#endif 
     92 
     93#undef FUNCNAME 
     94#define FUNCNAME MPI_Reduce_local 
     95#undef FCNAME 
     96#define FCNAME MPIU_QUOTE(FUNCNAME) 
     97/*@ 
     98MPI_Reduce_local - Applies a reduction operator to local arguments. 
     99 
     100Input Parameters: 
     101+ inbuf - address of the input buffer (choice) 
     102. count - number of elements in each buffer (integer) 
     103. datatype - data type of elements in the buffers (handle) 
     104- op - reduction operation (handle) 
     105 
     106Output Parameter: 
     107. inoutbuf - address of input-output buffer (choice) 
     108 
     109.N ThreadSafe 
     110 
     111.N Fortran 
     112 
     113.N collops 
     114 
     115.N Errors 
     116.N MPI_SUCCESS 
     117.N MPI_ERR_COUNT 
     118.N MPI_ERR_TYPE 
     119.N MPI_ERR_BUFFER 
     120.N MPI_ERR_BUFFER_ALIAS 
     121@*/ 
     122int MPI_Reduce_local(void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op) 
     123{ 
     124    int mpi_errno = MPI_SUCCESS; 
     125    MPID_Op *op_ptr; 
     126    MPID_MPI_STATE_DECL(MPID_STATE_MPI_REDUCE_LOCAL); 
     127 
     128    MPIR_ERRTEST_INITIALIZED_ORDIE(); 
     129 
     130    MPIU_THREAD_CS_ENTER(ALLFUNC,); 
     131    MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_REDUCE_LOCAL); 
     132 
     133    /* Validate parameters */ 
     134#   ifdef HAVE_ERROR_CHECKING 
     135    { 
     136        MPID_BEGIN_ERROR_CHECKS; 
     137        { 
     138            MPIR_ERRTEST_OP(op, mpi_errno); 
     139            if (mpi_errno) MPIU_ERR_POP(mpi_errno); 
     140 
     141            if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) { 
     142                MPID_Op_get_ptr(op, op_ptr); 
     143                MPID_Op_valid_ptr( op_ptr, mpi_errno ); 
     144            } 
     145            if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) { 
     146                mpi_errno = (*MPIR_Op_check_dtype_table[op%16 - 1])(datatype); 
     147            } 
     148            if (count != 0) { 
     149                MPIR_ERRTEST_ALIAS_COLL(inbuf, inoutbuf, mpi_errno); 
     150            } 
     151            if (mpi_errno != MPI_SUCCESS) goto fn_fail; 
     152        } 
     153        MPID_END_ERROR_CHECKS; 
     154    } 
     155#   endif /* HAVE_ERROR_CHECKING */ 
     156 
     157 
     158    /* ... body of routine ...  */ 
     159 
     160    mpi_errno = MPIR_Reduce_local_impl(inbuf, inoutbuf, count, datatype, op); 
     161 
    144162    /* ... end of body of routine ... */ 
    145163 
Note: See TracChangeset for help on using the changeset viewer.