btl_self_component.c
来自「MPI stands for the Message Passing Inter」· C语言 代码 · 共 191 行
C
191 行
/* * 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$ */#include "ompi_config.h"#ifdef HAVE_UNISTD_H#include <unistd.h>#endif /* HAVE_UNISTD_H */#ifdef HAVE_STRING_H#include <string.h>#endif /* HAVE_STRING_H */#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif /* HAVE_SYS_TYPES_H */#include "ompi/constants.h"#include "opal/sys/cache.h"#include "opal/event/event.h"#include "opal/util/if.h"#include "opal/util/argv.h"#include "opal/util/output.h"#include "orte/util/sys_info.h"#include "orte/util/proc_info.h"#include "ompi/mca/pml/pml.h"#include "opal/mca/base/mca_base_param.h"#include "btl_self.h"#include "btl_self_frag.h"/* * Shared Memory (SELF) component instance. */mca_btl_self_component_t mca_btl_self_component = { { /* super is being filled in */ /* First, the mca_base_component_t struct containing meta information about the component itself */ { /* Indicate that we are a pml v1.0.0 component (which also implies a specific MCA version) */ MCA_BTL_BASE_VERSION_1_0_1, "self", /* MCA component name */ OMPI_MAJOR_VERSION, /* MCA component major version */ OMPI_MINOR_VERSION, /* MCA component minor version */ OMPI_RELEASE_VERSION, /* MCA component release version */ mca_btl_self_component_open, /* component open */ mca_btl_self_component_close /* component close */ }, /* Next the MCA v1.0.0 component meta data */ { /* Whether the component is checkpointable or not */ false }, mca_btl_self_component_init, NULL, } /* end super */};/* * Called by MCA framework to open the component, registers * component parameters. */int mca_btl_self_component_open(void){ int tmp; /* register SELF component parameters */ mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "free_list_num", "Number of fragments by default", false, false, 0, &mca_btl_self_component.free_list_num ); mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "free_list_max", "Maximum number of fragments", false, false, -1, &mca_btl_self_component.free_list_max ); mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "free_list_inc", "Increment by this number of fragments", false, false, 32, &mca_btl_self_component.free_list_inc ); mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "eager_limit", "Eager size fragmeng (before the rendez-vous ptotocol)", false, false, 128 * 1024, &tmp); mca_btl_self.btl_eager_limit = tmp; mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "min_send_size", "Minimum fragment size after the rendez-vous", false, false, 256 * 1024, &tmp); mca_btl_self.btl_min_send_size = tmp; mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "max_send_size", "Maximum fragment size after the rendez-vous", false, false, 256 * 1024, &tmp); mca_btl_self.btl_max_send_size = tmp; mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "min_rdma_size", "Maximum fragment size for the RDMA transfer", false, false, INT_MAX, &tmp); mca_btl_self.btl_min_rdma_size = tmp; mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "max_rdma_size", "Maximum fragment size for the RDMA transfer", false, false, INT_MAX, &tmp); mca_btl_self.btl_max_rdma_size = tmp; mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "exclusivity", "Device exclusivity", false, false, MCA_BTL_EXCLUSIVITY_HIGH, (int*)&mca_btl_self.btl_exclusivity ); mca_base_param_reg_int( (mca_base_component_t*)&mca_btl_self_component, "flags", "Active behavior flags", false, false, MCA_BTL_FLAGS_PUT | MCA_BTL_FLAGS_SEND_INPLACE, (int*)&mca_btl_self.btl_flags ); /* initialize objects */ OBJ_CONSTRUCT(&mca_btl_self_component.self_lock, opal_mutex_t); OBJ_CONSTRUCT(&mca_btl_self_component.self_frags_eager, ompi_free_list_t); OBJ_CONSTRUCT(&mca_btl_self_component.self_frags_send, ompi_free_list_t); OBJ_CONSTRUCT(&mca_btl_self_component.self_frags_rdma, ompi_free_list_t); return OMPI_SUCCESS;}/* * component cleanup - sanity checking of queue lengths */int mca_btl_self_component_close(void){ OBJ_DESTRUCT(&mca_btl_self_component.self_lock); OBJ_DESTRUCT(&mca_btl_self_component.self_frags_eager); OBJ_DESTRUCT(&mca_btl_self_component.self_frags_send); OBJ_DESTRUCT(&mca_btl_self_component.self_frags_rdma); return OMPI_SUCCESS;}/* * SELF component initialization */mca_btl_base_module_t** mca_btl_self_component_init( int *num_btls, bool enable_progress_threads, bool enable_mpi_threads){ mca_btl_base_module_t **btls = NULL; *num_btls = 0; /* allocate the Shared Memory PTL */ *num_btls = 1; btls = (mca_btl_base_module_t**)malloc((*num_btls)*sizeof(mca_btl_base_module_t*)); if (NULL == btls) { return NULL; } /* initialize free lists */ ompi_free_list_init(&mca_btl_self_component.self_frags_eager, sizeof(mca_btl_self_frag_eager_t) + mca_btl_self.btl_eager_limit, OBJ_CLASS(mca_btl_self_frag_eager_t), mca_btl_self_component.free_list_num, mca_btl_self_component.free_list_max, mca_btl_self_component.free_list_inc, NULL); ompi_free_list_init(&mca_btl_self_component.self_frags_send, sizeof(mca_btl_self_frag_send_t) + mca_btl_self.btl_max_send_size, OBJ_CLASS(mca_btl_self_frag_send_t), mca_btl_self_component.free_list_num, mca_btl_self_component.free_list_max, mca_btl_self_component.free_list_inc, NULL); ompi_free_list_init(&mca_btl_self_component.self_frags_rdma, sizeof(mca_btl_self_frag_rdma_t), OBJ_CLASS(mca_btl_self_frag_rdma_t), mca_btl_self_component.free_list_num, mca_btl_self_component.free_list_max, mca_btl_self_component.free_list_inc, NULL); /* get pointer to the btls */ btls[0] = (mca_btl_base_module_t *)(&mca_btl_self); return btls;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?