opal_progress.h
来自「MPI stands for the Message Passing Inter」· C头文件 代码 · 共 151 行
H
151 行
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2006 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$ * * Additional copyrights may follow * * $HEADER$ *//** * @file * * Progress engine for Open MPI */#ifndef _OMPI_PROGRESS_H_#define _OMPI_PROGRESS_H_#if defined(c_plusplus) || defined(__cplusplus)extern "C" {#endif#include "opal/threads/mutex.h"/** * Initialize the progress engine * * Initialize the progress engine, including constructing the * proper locks and allocating space for the progress registration * functions. At this point, any function in the progress engine * interface may be called. */OPAL_DECLSPEC int opal_progress_init(void);/** * Configure the progress engine for executing MPI applications * * Register to receive any needed information from the GPR and * intialize any data structures required for MPI applications. * * \note opal_progress_init() must be called before calling * this function. Failure to do so is an error. */OPAL_DECLSPEC int opal_progress_mpi_init(void);/** * Turn on optimizations for MPI progress * * Turn on optimizations for MPI applications. This includes lowering * the rate at which the event library is ticked if it is not under * active use and possibly disabling the sched_yield call when the * progress engine is idle */OPAL_DECLSPEC int opal_progress_mpi_enable(void);/** * Turn off all optimizations enabled by opal_progress_mpi_enable(). * * Completely reverses all optimizations enabled by * opal_progress_mpi_enable(). The event library resumes constant * ticking and the progress engine yields the CPU when idle. */OPAL_DECLSPEC int opal_progress_mpi_disable(void);/** * Shut down the progress engine * * Shut down the progress engine. This includes deregistering all * registered callbacks and freeing all resources. After finalize * returns, no calls into the progress interface are allowed. */OPAL_DECLSPEC int opal_progress_finalize(void);/** * Control how the event library is called */OPAL_DECLSPEC void opal_progress_events(int);/** * Progress all pending events */OPAL_DECLSPEC void opal_progress(void);typedef int (*opal_progress_callback_t)(void);/** * Register an event to be progressed */OPAL_DECLSPEC int opal_progress_register(opal_progress_callback_t cb);/** * Unregister previously registered event */OPAL_DECLSPEC int opal_progress_unregister(opal_progress_callback_t cb);/** * Increase count of MPI users of the event library */ OPAL_DECLSPEC int opal_progress_event_increment(void);/** * Decrease count of MPI users of the event library */ OPAL_DECLSPEC int opal_progress_event_decrement(void);/** * Progress until flag is true or poll iterations completed */OPAL_DECLSPEC extern volatile int32_t opal_progress_thread_count;OPAL_DECLSPEC extern int opal_progress_spin_count;static inline bool opal_progress_threads(void) { return (opal_progress_thread_count > 0); }static inline bool opal_progress_spin(volatile bool* complete){ int32_t c; OPAL_THREAD_ADD32(&opal_progress_thread_count,1); for (c = 0; c < opal_progress_spin_count; c++) { if (true == *complete) { OPAL_THREAD_ADD32(&opal_progress_thread_count,-1); return true; } opal_progress(); } OPAL_THREAD_ADD32(&opal_progress_thread_count,-1); return false;}#if defined(c_plusplus) || defined(__cplusplus)}#endif#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?