/*@ MPI_T_category_get_info - Get the information about a category Input/Output Parameters: + name_len - length of the string and/or buffer for name (integer) - desc_len - length of the string and/or buffer for desc (integer) Input Parameters: . cat_index - index of the category to be queried (integer) Output Parameters: + name - buffer to return the string containing the name of the category (string) . desc - buffer to return the string containing the description of the category (string) . num_cvars - number of control variables contained in the category (integer) . num_pvars - number of performance variables contained in the category (integer) - num_categories - number of categories contained in the category (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_INDEX @*/ int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len, int *num_cvars, int *num_pvars, int *num_categories) { int mpi_errno = MPI_SUCCESS; cat_table_entry_t *cat; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INFO); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INFO); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_CAT_INDEX(cat_index, mpi_errno); /* Do not do _TEST_ARGNULL for other arguments, since this is * allowed or will be allowed by MPI_T standard. */ } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ cat = (cat_table_entry_t *)utarray_eltptr(cat_table, cat_index); MPIR_T_strncpy(name, cat->name, name_len); MPIR_T_strncpy(desc, cat->desc, desc_len); if (num_cvars != NULL) *num_cvars = utarray_len(cat->cvar_indices); if (num_pvars != NULL) *num_pvars = utarray_len(cat->pvar_indices); if (num_categories != NULL) *num_categories = utarray_len(cat->subcat_indices); /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INFO); 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_category_get_info", "**mpi_t_category_get_info %d %p %p %p %p %p %p %p", cat_index, name, name_len, desc, desc_len, num_cvars, num_pvars, num_categories); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ 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_enum_get_item - Get the information about an item in an enumeration Input/Output Parameters: . name_len - length of the string and/or buffer for name (integer) Input Parameters: . enumtype - enumeration to be queried (handle) Output Parameters: + index - number of the value to be queried in this enumeration (integer) . value - variable value (integer) - name - buffer to return the string containing the name of the enumeration item (string) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_HANDLE .N MPI_T_ERR_INVALID_ITEM @*/ int MPI_T_enum_get_item(MPI_T_enum enumtype, int index, int *value, char *name, int *name_len) { int mpi_errno = MPI_SUCCESS; enum_item_t *item; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_ENUM_GET_ITEM); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_ENUM_GET_ITEM); /* Validate parameters */ #ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS; { MPIR_ERRTEST_ENUM_HANDLE(enumtype, mpi_errno); MPIR_ERRTEST_ENUM_ITEM(enumtype, index, mpi_errno); MPIR_ERRTEST_ARGNULL(value, "value", mpi_errno); /* Do not do TEST_ARGNULL for name or name_len, since this is * permitted per MPI_T standard. */ } MPID_END_ERROR_CHECKS; } #endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ item = (enum_item_t *) utarray_eltptr(enumtype->items, index); *value = item->value; MPIR_T_strncpy(name, item->name, name_len); /* ... end of body of routine ... */ #ifdef HAVE_ERROR_CHECKING fn_exit: #endif MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_ENUM_GET_ITEM); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; #ifdef HAVE_ERROR_CHECKING fn_fail: /* --BEGIN ERROR HANDLING-- */ { mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, __func__, __LINE__, MPI_ERR_OTHER, "**mpi_t_enum_get_item", "**mpi_t_enum_get_item %p %d %p %p %p", enumtype, index, value, name, name_len); } mpi_errno = MPIR_Err_return_comm(NULL, __func__, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ #endif }
/*@ 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-- */ }
/*@ MPI_T_pvar_get_index - Get the index of a performance variable Input Parameters: . name - the name of the performance variable (string) . var_class - the class of the performance variable (integer) Output Parameters: . pvar_index - the index of the performance variable (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_INVALID_NAME .N MPI_T_ERR_NOT_INITIALIZED @*/ int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index) { int mpi_errno = MPI_SUCCESS; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INDEX); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_GET_INDEX); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(name, "name", mpi_errno); MPIR_ERRTEST_ARGNULL(pvar_index, "pvar_index", mpi_errno); if (var_class < MPIR_T_PVAR_CLASS_FIRST || var_class >= MPIR_T_PVAR_CLASS_LAST) { mpi_errno = MPI_T_ERR_INVALID_NAME; goto fn_fail; } } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ int seq = var_class - MPIR_T_PVAR_CLASS_FIRST; name2index_hash_t *hash_entry; /* Do hash lookup by the name */ HASH_FIND_STR(pvar_hashs[seq], name, hash_entry); if (hash_entry != NULL) { *pvar_index = hash_entry->idx; } else { mpi_errno = MPI_T_ERR_INVALID_NAME; goto fn_fail; } /* ... end of body of routine ... */ fn_exit: MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_GET_INDEX); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; fn_fail: goto fn_exit; }
/*@ MPI_T_enum_get_info - Get the information about an enumeration Input/Output Parameters: . name_len - length of the string and/or buffer for name (integer) Input Parameters: . enumtype - enumeration to be queried (handle) Output Parameters: + num - number of discrete values represented by this enumeration (integer) - name - buffer to return the string containing the name of the enumeration (string) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_HANDLE @*/ int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_ENUM_GET_INFO); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_ENUM_GET_INFO); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ENUM_HANDLE(enumtype, mpi_errno); MPIR_ERRTEST_ARGNULL(num, "num", mpi_errno); /* Do not do _TEST_ARGNULL for name or name_len, since this is * permitted per MPI_T standard. */ } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ *num = utarray_len(enumtype->items); MPIR_T_strncpy(name, enumtype->name, name_len); /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_ENUM_GET_INFO); 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_enum_get_info", "**mpi_t_enum_get_info %p %p %p %p", enumtype, num, name, name_len); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_category_get_cvars - Get control variables in a category Input Parameters: + cat_index - index of the category to be queried, in the range [0,N-1] (integer) - len - the length of the indices array (integer) Output Parameters: . indices - an integer array of size len, indicating control variable indices (array of integers) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_INDEX @*/ int MPI_T_category_get_cvars(int cat_index, int len, int indices[]) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_CVARS); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_CVARS); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_CAT_INDEX(cat_index, mpi_errno); if (len != 0) MPIR_ERRTEST_ARGNULL(indices, "indices", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ if (len == 0) goto fn_exit; mpi_errno = MPIR_T_category_get_cvars_impl(cat_index, len, indices); if (mpi_errno) MPIU_ERR_POP(mpi_errno); /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_CVARS); 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_category_get_cvars", "**mpi_t_category_get_cvars %d %d %p", cat_index, len, indices); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_cvar_handle_free - Free an existing handle for a control variable Input/Output Parameters: . handle - handle to be freed (handle) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_HANDLE @*/ int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) { int mpi_errno = MPI_SUCCESS; MPIR_T_cvar_handle_t *hnd; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_HANDLE_FREE); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_HANDLE_FREE); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(handle, "handle", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ hnd = *handle; MPIU_Free(hnd); *handle = MPI_T_CVAR_HANDLE_NULL; /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_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_cvar_handle_free", "**mpi_t_cvar_handle_free %p", handle); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_category_get_num - Get the number of categories Output Parameters: . num_cat - current number of categories (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED @*/ int MPI_T_category_get_num(int *num_cat) { int mpi_errno = MPI_SUCCESS; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_NUM); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_NUM); /* Validate parameters */ #ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS; { MPIR_ERRTEST_ARGNULL(num_cat, "num_cat", mpi_errno); } MPID_END_ERROR_CHECKS; } #endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ *num_cat = utarray_len(cat_table); /* ... end of body of routine ... */ #ifdef HAVE_ERROR_CHECKING fn_exit: #endif MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_NUM); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; #ifdef HAVE_ERROR_CHECKING fn_fail: /* --BEGIN ERROR HANDLING-- */ { mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, __func__, __LINE__, MPI_ERR_OTHER, "**mpi_t_category_get_num", "**mpi_t_category_get_num %p", num_cat); } mpi_errno = MPIR_Err_return_comm(NULL, __func__, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ #endif }
/*@ MPI_T_cvar_read - Read the value of a control variable Input Parameters: . handle - handle to the control variable to be read (handle) Output Parameters: . buf - initial address of storage location for variable value .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_HANDLE @*/ int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) { int mpi_errno = MPI_SUCCESS; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_READ); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_READ); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_CVAR_HANDLE(handle, mpi_errno); MPIR_ERRTEST_ARGNULL(buf, "buf", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ mpi_errno = MPIR_T_cvar_read_impl(handle, buf); if (mpi_errno) MPIR_ERR_POP(mpi_errno); /* ... end of body of routine ... */ fn_exit: MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_READ); 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_cvar_read", "**mpi_t_cvar_read %p %p", handle, buf); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_cvar_get_num - Get the number of control variables Output Parameters: . num_cvar - returns number of control variables (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED @*/ int MPI_T_cvar_get_num(int *num_cvar) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_NUM); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_GET_NUM); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(num_cvar, "num_cvar", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ *num_cvar = utarray_len(cvar_table); /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_GET_NUM); 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_cvar_get_num", "**mpi_t_cvar_get_num %p", num_cvar); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_pvar_session_create - Create a new session for accessing performance variables Output Parameters: . session - identifier of performance session (handle) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_OUT_OF_SESSIONS @*/ int MPI_T_pvar_session_create(MPI_T_pvar_session *session) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_SESSION_CREATE); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_SESSION_CREATE); /* Validate parameters, especially handles needing to be converted */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(session, "session", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ mpi_errno = MPIR_T_pvar_session_create_impl(session); if (mpi_errno != MPI_SUCCESS) goto fn_fail; /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_SESSION_CREATE); 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_session_create", "**mpi_t_pvar_session_create %p", session); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_category_changed - Get the timestamp indicating the last change to the categories Output Parameters: . stamp - a virtual time stamp to indicate the last change to the categories (integer) Notes: If two subsequent calls to this routine return the same timestamp, it is guaranteed that the category information has not changed between the two calls. If the timestamp retrieved from the second call is higher, then some categories have been added or expanded. .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED @*/ int MPI_T_category_changed(int *stamp) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_CHANGED); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_CHANGED); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(stamp, "stamp", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ *stamp = cat_stamp; /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_CHANGED); 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_category_changed", "**mpi_t_category_changed %p", stamp); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }
/*@ MPI_T_category_get_index - Get the index of a category Output Parameters: . name - the name of the category (string) Output Parameters: . cat_index - the index of the category (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_INVALID_NAME .N MPI_T_ERR_NOT_INITIALIZED @*/ int MPI_T_category_get_index(const char *name, int *cat_index) { int mpi_errno = MPI_SUCCESS; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INDEX); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INDEX); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_ARGNULL(name, "name", mpi_errno); MPIR_ERRTEST_ARGNULL(cat_index, "cat_index", mpi_errno); } MPID_END_ERROR_CHECKS } # endif /* HAVE_ERROR_CHECKING */ /* ... body of routine ... */ name2index_hash_t *hash_entry; /* Do hash lookup by the name */ HASH_FIND_STR(cat_hash, name, hash_entry); if (hash_entry != NULL) { *cat_index = hash_entry->idx; } else { mpi_errno = MPI_T_ERR_INVALID_NAME; goto fn_fail; } /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INDEX); MPIR_T_THREAD_CS_EXIT(); return mpi_errno; fn_fail: goto fn_exit; }
/*@ MPI_T_pvar_get_info - Get the inforamtion about a performance variable Input/Output Parameters: + name_len - length of the string and/or buffer for name (integer) - desc_len - length of the string and/or buffer for desc (integer) Input Parameters: . pvar_index - index of the performance variable to be queried between 0 and num_pvar-1 (integer) Output Parameters: + name - buffer to return the string containing the name of the performance variable (string) . verbosity - verbosity level of this variable (integer) . var_class - class of performance variable (integer) . datatype - MPI type of the information stored in the performance variable (handle) . enumtype - optional descriptor for enumeration information (handle) . desc - buffer to return the string containing a description of the performance variable (string) . binding - type of MPI object to which this variable must be bound (integer) . readonly - flag indicating whether the variable can be written/reset (integer) . continuous - flag indicating whether the variable can be started and stopped or is continuously active (integer) - atomic - flag indicating whether the variable can be atomically read and reset (integer) .N ThreadSafe .N Errors .N MPI_SUCCESS .N MPI_T_ERR_NOT_INITIALIZED .N MPI_T_ERR_INVALID_INDEX @*/ int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class, MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len, int *binding, int *readonly, int *continuous, int *atomic) { int mpi_errno = MPI_SUCCESS; const pvar_table_entry_t *entry; const pvar_table_entry_t *info; MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INFO); MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno); MPIR_T_THREAD_CS_ENTER(); MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_GET_INFO); /* Validate parameters */ # ifdef HAVE_ERROR_CHECKING { MPID_BEGIN_ERROR_CHECKS { MPIR_ERRTEST_PVAR_INDEX(pvar_index, mpi_errno); /* Do not do _TEST_ARGNULL for other arguments, since this is * allowed or will be allowed by MPI_T standard. */ } 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; } info = (pvar_table_entry_t *) utarray_eltptr(pvar_table, pvar_index); MPIR_T_strncpy(name, info->name, name_len); MPIR_T_strncpy(desc, info->desc, desc_len); if (verbosity != NULL) *verbosity = info->verbosity; if (var_class != NULL) *var_class = info->varclass; if (datatype != NULL) *datatype = info->datatype; if (enumtype != NULL) *enumtype = info->enumtype; if (binding != NULL) *binding = info->bind; if (readonly != NULL) *readonly = info->flags & MPIR_T_PVAR_FLAG_READONLY; if (continuous != NULL) *continuous = info->flags & MPIR_T_PVAR_FLAG_CONTINUOUS; if (atomic != NULL) *atomic = info->flags & MPIR_T_PVAR_FLAG_ATOMIC; /* ... end of body of routine ... */ fn_exit: MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_GET_INFO); 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_get_info", "**mpi_t_pvar_get_info %d %p %p %p %p %p %p %p %p %p %p %p %p", pvar_index, name, name_len, verbosity, var_class, datatype, enumtype, desc, desc_len, binding, readonly, continuous, atomic); } # endif mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno); goto fn_exit; /* --END ERROR HANDLING-- */ }