/*@ MPI_T_pvar_readreset - Read the value of a performance variable and then reset it Input Parameters: + session - identifier of performance experiment session (handle) - handle - handle of a performance variable (handle) Output Parameters: . buf - initial address of storage location for variable value (choice) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_SESSION .N MPI_T_ERR_INVALID_HANDLE .N MPI_T_ERR_PVAR_NO_WRITE .N MPI_T_ERR_PVAR_NO_ATOMIC @*/ int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_READRESET); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_READRESET); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_PVAR_SESSION(session, mpi_errno); MPIR_ERRTEST_PVAR_HANDLE(handle, mpi_errno); MPIR_ERRTEST_ARGNULL(buf, "buf", mpi_errno); if (handle == MPI_T_PVAR_ALL_HANDLES || session != handle->session || !MPIR_T_pvar_is_oncestarted(handle)) { mpi_errno = MPI_T_ERR_INVALID_HANDLE; goto fn_fail; } if (!MPIR_T_pvar_is_atomic(handle)) { mpi_errno = MPI_T_ERR_PVAR_NO_ATOMIC; goto fn_fail; } } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ mpi_errno = MPIR_T_pvar_readreset_impl(session, handle, buf); if (mpi_errno != MPI_SUCCESS) goto fn_fail; /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_READRESET); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; fn_fail: /* --BEGIN ERROR HANDLING-- */ # ifdef HAVE_ERROR_CHECKING { mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**mpi_t_pvar_readreset", "**mpi_t_pvar_readreset %p %p %p", session, handle, buf); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_pvar_handle_alloc - Allocate a handle for a performance variable Input Parameters: + session - identifier of performance experiment session (handle) . pvar_index - index of performance variable for which handle is to be allocated (integer) - obj_handle - reference to a handle of the MPI object to which this variable is supposed to be bound (pointer) Output Parameters: + handle - allocated handle (handle) - count - number of elements used to represent this variable (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_SESSION .N MPI_T_ERR_INVALID_INDEX .N MPI_T_ERR_OUT_OF_HANDLES @*/ int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle, MPI_T_pvar_handle *handle, int *count) { int mpi_errno = MPI_SUCCESS; pvar_table_entry_t *entry; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_PVAR_SESSION(session, mpi_errno); MPIR_ERRTEST_PVAR_INDEX(pvar_index, mpi_errno); MPIR_ERRTEST_ARGNULL(count, "count", mpi_errno); MPIR_ERRTEST_ARGNULL(handle, "handle", mpi_errno); /* Do not test obj_handle since it may be NULL when no binding */ } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ entry = (pvar_table_entry_t *) utarray_eltptr(pvar_table, pvar_index); if (!entry->active) { mpi_errno = MPI_T_ERR_INVALID_INDEX; goto fn_fail; } mpi_errno = MPIR_T_pvar_handle_alloc_impl(session, pvar_index, obj_handle, handle, count); if (mpi_errno) goto fn_fail; /* ... end of body of routine ... */ fn_exit: MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; fn_fail: /* --BEGIN ERROR HANDLING-- */ # ifdef HAVE_ERROR_CHECKING { mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**mpi_t_pvar_handle_alloc", "**mpi_t_pvar_handle_alloc %p %d %p %p %p", session, pvar_index, obj_handle, handle, count); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_pvar_handle_free - Free an existing handle for a performance variable Input/Output Parameters: + session - identifier of performance experiment session (handle) - handle - handle to be freed (handle) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_SESSION .N MPI_T_ERR_INVALID_HANDLE @*/ int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) { int mpi_errno = MPI_SUCCESS; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_HANDLE_FREE); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_HANDLE_FREE); /* Validate parameters, especially handles needing to be converted */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(handle, "handle", mpi_errno); if (*handle == MPI_T_PVAR_HANDLE_NULL) /* free NULL is OK */ goto fn_exit; MPIR_ERRTEST_PVAR_SESSION(session, mpi_errno); MPIR_ERRTEST_PVAR_HANDLE(*handle, mpi_errno); if ((*handle) == MPI_T_PVAR_ALL_HANDLES || (*handle)->session != session) { mpi_errno = MPI_T_ERR_INVALID_HANDLE; goto fn_fail; } } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ mpi_errno = MPIR_T_pvar_handle_free_impl(session, handle); if (mpi_errno) MPIR_ERR_POP(mpi_errno); /* ... end of body of routine ... */ fn_exit: MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_HANDLE_FREE); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; fn_fail: /* --BEGIN ERROR HANDLING-- */ # ifdef HAVE_ERROR_CHECKING { mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**mpi_t_pvar_handle_free", "**mpi_t_pvar_handle_free %p %p", session, handle); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }