📄 mpid_nem_queue.h
字号:
(qhead)->my_head = _e->next; \ } \ else \ { \ MPID_nem_cell_rel_ptr_t old_tail; \ \ MPID_NEM_SET_REL_NULL ((qhead)->my_head); \ \ old_tail = MPID_NEM_CAS_REL_NULL (&((qhead)->tail), _r_e); \ \ if (!MPID_NEM_REL_ARE_EQUAL (old_tail, _r_e)) \ { \ while (MPID_NEM_IS_REL_NULL (_e->next)) \ { \ SKIP; \ } \ (qhead)->my_head = _e->next; \ } \ } \ MPID_NEM_SET_REL_NULL (_e->next); \ *(e) = _e; \} while (0) #else /* MPID_NEM_USE_SHADOW_HEAD */#define MPID_nem_queue_dequeue(qhead, e) do { \ register MPID_nem_cell_ptr_t _e; \ register MPID_nem_cell_rel_ptr_t _r_e; \ \ _r_e = (qhead)->head; \ \ _e = MPID_NEM_REL_TO_ABS (_r_e); \ if (!MPID_NEM_IS_REL_NULL (_e->next)) \ { \ (qhead)->head = _e->next; \ } \ else \ { \ MPID_nem_cell_rel_ptr_t old_tail; \ \ MPID_NEM_SET_REL_NULL ((qhead)->head); \ \ old_tail = MPID_NEM_CAS_REL_NULL (&((qhead)->tail), _r_e); \ \ if (!MPID_NEM_REL_ARE_EQUAL (old_tail, _r_e)) \ { \ while (MPID_NEM_IS_REL_NULL (_e->next)) \ { \ SKIP; \ } \ (qhead)->head = _e->next; \ } \ } \ MPID_NEM_SET_REL_NULL (_e->next); \ *(e) = _e; \} while (0) #endif /* MPID_NEM_USE_SHADOW_HEAD */#endif /* MPID_NEM_USE_MACROS *//* #ifndef MPID_NEM_USE_MACROS *//* /\* Gets the head *\/ *//* static inline void *//* MPID_nem_rel_queue_dequeue (MPID_nem_queue_ptr_t rel_qhead, MPID_nem_cell_ptr_t *e) *//* { *//* MPID_nem_queue_ptr_t qhead = MPID_NEM_REL_TO_ABS( rel_qhead ); *//* register MPID_nem_cell_ptr_t _e; *//* register MPID_nem_cell_ptr_t _e_abs; */ /* /\*DO_PAPI (if (iter11) PAPI_accum_var (PAPI_EventSet, PAPI_vvalues11)); *\/ *//* /\* DO_PAPI (PAPI_reset (PAPI_EventSet)); *\/ *//* #ifdef MPID_NEM_USE_SHADOW_HEAD *//* (_e) = qhead->my_head; *//* #else /\*SHADOW_HEAD *\/ *//* (_e) = qhead->head ; *//* #endif /\*SHADOWHEAD *\/ *//* (_e_abs) = MPID_NEM_REL_TO_ABS( (_e) ); *//* if ((_e_abs)->next != MPID_NEM_REL_NULL) *//* { *//* #ifdef MPID_NEM_USE_SHADOW_HEAD *//* qhead->my_head = (_e_abs)->next; *//* #else /\*MPID_NEM_USE_SHADOW_HEAD *\/ *//* qhead->head = (_e_abs)->next; *//* #endif /\*MPID_NEM_USE_SHADOW_HEAD *\/ *//* } *//* else *//* { *//* MPID_nem_cell_ptr_t old_tail; */ /* #ifdef MPID_NEM_USE_SHADOW_HEAD *//* qhead->my_head = MPID_NEM_REL_NULL; *//* #else /\*MPID_NEM_USE_SHADOW_HEAD *\/ *//* qhead->head = MPID_NEM_REL_NULL; *//* #endif /\*MPID_NEM_USE_SHADOW_HEAD *\/ *//* old_tail = MPID_NEM_CAS (&(qhead->tail), (_e), MPID_NEM_REL_NULL); *//* if (old_tail != (_e)) *//* { *//* while ((_e_abs)->next == MPID_NEM_REL_NULL) *//* { *//* SKIP; *//* } *//* #ifdef MPID_NEM_USE_SHADOW_HEAD *//* qhead->my_head = (_e_abs)->next; *//* #else /\*MPID_NEM_USE_SHADOW_HEAD *\/ *//* qhead->head = (_e_abs)->next; *//* #endif /\*MPID_NEM_USE_SHADOW_HEAD *\/ *//* } *//* } *//* (_e_abs)->next = MPID_NEM_REL_NULL; *//* *e = _e; *//* /\* DO_PAPI (if (iter11) PAPI_accum_var (PAPI_EventSet, PAPI_vvalues11)); *\/ *//* } *//* #else /\* MPID_NEM_USE_MACROS *\/ *//* #ifdef MPID_NEM_USE_SHADOW_HEAD *//* #define MPID_nem_rel_queue_dequeue(rel_qhead, e) do { \ *//* MPID_nem_queue_ptr_t qhead = MPID_NEM_REL_TO_ABS( (MPID_nem_queue_ptr_t)rel_qhead ); \ *//* register MPID_nem_cell_ptr_t _e; \ *//* register MPID_nem_cell_ptr_t _e_abs; \ *//* /\* DO_PAPI (PAPI_reset (PAPI_EventSet)); *\/ \ *//* (_e) = (qhead)->my_head; \ *//* (_e_abs) = MPID_NEM_REL_TO_ABS( (_e) ); \ *//* if ((_e_abs)->next != MPID_NEM_REL_NULL) \ *//* { \ *//* (qhead)->my_head = (_e_abs)->next; \ *//* } \ *//* else \ *//* { \ *//* MPID_nem_cell_ptr_t old_tail; \ *//* \ *//* (qhead)->my_head = MPID_NEM_REL_NULL; \ *//* old_tail = MPID_NEM_CAS (&((qhead)->tail), (_e), MPID_NEM_REL_NULL); \ *//* if (old_tail != (_e)) \ *//* { \ *//* while ((_e_abs)->next == MPID_NEM_REL_NULL) \ *//* { \ *//* SKIP; \ *//* } \ *//* (qhead)->my_head = (_e_abs)->next; \ *//* } \ *//* } \ *//* \ *//* (_e_abs)->next = MPID_NEM_REL_NULL; \ *//* *(e) = _e; \ *//* /\* DO_PAPI (if (iter11) PAPI_accum (PAPI_EventSet, PAPI_values11));*\/ \ *//* /\*DO_PAPI (if (iter11) PAPI_accum (PAPI_EventSet, PAPI_values11)); *\/ \ *//* } while (0) *//* #else /\* MPID_NEM_USE_SHADOW_HEAD *\/ *//* #define MPID_nem_rel_queue_dequeue(rel_qhead, e) do { \ *//* MPID_nem_queue_ptr_t qhead = MPID_NEM_REL_TO_ABS( (MPID_nem_queue_ptr_t)rel_qhead ); \ *//* register MPID_nem_cell_ptr_t _e; \ *//* register MPID_nem_cell_ptr_t _e_abs; \ *//* /\* DO_PAPI (PAPI_reset (PAPI_EventSet)); *\/ \ *//* (_e) = (qhead)->head; \ *//* (_e_abs) = MPID_NEM_REL_TO_ABS( (_e) ); \ *//* if ((_e_abs)->next != MPID_NEM_REL_NULL) \ *//* { \ *//* (qhead)->head = (_e_abs)->next; \ *//* } \ *//* else \ *//* { \ *//* MPID_nem_cell_ptr_t old_tail; \ *//* \ *//* (qhead)->head = MPID_NEM_REL_NULL; \ *//* old_tail = MPID_NEM_CAS (&((qhead)->tail), (_e), MPID_NEM_REL_NULL); \ *//* if (old_tail != (_e)) \ *//* { \ *//* while ((_e_abs)->next == MPID_NEM_REL_NULL) \ *//* { \ *//* SKIP; \ *//* } \ *//* (qhead)->head = (_e_abs)->next; \ *//* } \ *//* } \ *//* \ *//* (_e_abs)->next = MPID_NEM_REL_NULL; \ *//* *(e) = _e; \ *//* /\* DO_PAPI (if (iter11) PAPI_accum (PAPI_EventSet, PAPI_values11));*\/ \ *//* /\*DO_PAPI (if (iter11) PAPI_accum (PAPI_EventSet, PAPI_values11)); *\/ \ *//* } while (0) *//* #endif /\* MPID_NEM_USE_SHADOW_HEAD *\/ *//* #endif /\* MPID_NEM_USE_MACROS *\/ */#if 0 /* Where are these functions used? */#ifdef MPID_NEM_USE_SHADOW_HEAD#undef FUNCNAME#define FUNCNAME MPID_nem_queue_poll#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)static inline int MPID_nem_queue_poll (MPID_nem_queue_ptr_t qhead, MPID_nem_poll_dir_t in_or_out){ int mpi_errno = MPI_SUCCESS; mpi_errno = MPID_nem_network_poll (in_or_out); if (mpi_errno) MPIU_ERR_POP (mpi_errno); if (MPID_NEM_IS_REL_NULL (qhead->my_head)) { while (MPID_NEM_IS_REL_NULL (qhead->head)) { mpi_errno = MPID_nem_network_poll (in_or_out); if (mpi_errno) MPIU_ERR_POP (mpi_errno); sched_yield(); } qhead->my_head = qhead->head; MPID_NEM_SET_REL_NULL (qhead->head); } fn_exit: return mpi_errno; fn_fail: goto fn_exit;}#else #undef FUNCNAME#define FUNCNAME MPID_nem_queue_poll#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)static inline int MPID_nem_queue_poll (MPID_nem_queue_ptr_t qhead, MPID_nem_poll_dir_t in_or_out){ int mpi_errno = MPI_SUCCESS; mpi_errno = MPID_nem_network_poll (in_or_out); if (mpi_errno) MPIU_ERR_POP (mpi_errno); while (MPID_NEM_IS_REL_NULL (qhead->head)) { mpi_errno = MPID_nem_network_poll (in_or_out); if (mpi_errno) MPIU_ERR_POP (mpi_errno); sched_yield(); } fn_exit: return mpi_errno; fn_fail: goto fn_exit;}#endif/* MPID_NEM_USE_SHADOW_HEAD */#endif/* #ifdef MPID_NEM_USE_SHADOW_HEAD *//* static inline *//* void MPID_nem_rel_queue_poll (MPID_nem_queue_ptr_t rel_qhead, MPID_nem_poll_dir_t in_or_out) *//* { *//* MPID_nem_queue_ptr_t qhead = MPID_NEM_REL_TO_ABS( rel_qhead ); *//* MPID_nem_rel_network_poll (in_or_out); *//* if (qhead->my_head == MPID_NEM_REL_NULL) *//* { *//* while (qhead->head == MPID_NEM_REL_NULL) *//* { *//* MPID_nem_rel_network_poll ( in_or_out ); *//* sched_yield(); *//* } *//* qhead->my_head = qhead->head; *//* qhead->head = MPID_NEM_REL_NULL; *//* } *//* } *//* #else *//* static inline void MPID_nem_rel_queue_poll (MPID_nem_queue_ptr_t rel_qhead, MPID_nem_poll_dir_t in_or_out) *//* { *//* MPID_nem_queue_ptr_t qhead = MPID_NEM_REL_TO_ABS( rel_qhead ); *//* MPID_nem_rel_network_poll ( in_or_out ); *//* while (qhead->head == MPID_NEM_REL_NULL) *//* { *//* MPID_nem_rel_network_poll ( in_or_out ); *//* sched_yield(); *//* } *//* } *//* #endif/\* MPID_NEM_USE_SHADOW_HEAD *\/ */#endif /* MPID_NEM_QUEUE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -