/* * Initializes the mpool module. */ void mca_mpool_rgpusm_module_init(mca_mpool_rgpusm_module_t* mpool) { mpool->super.mpool_component = &mca_mpool_rgpusm_component.super; mpool->super.mpool_base = NULL; /* no base .. */ mpool->super.mpool_alloc = NULL; mpool->super.mpool_realloc = NULL; mpool->super.mpool_free = mca_mpool_rgpusm_free; mpool->super.mpool_register = mca_mpool_rgpusm_register; mpool->super.mpool_find = mca_mpool_rgpusm_find; mpool->super.mpool_deregister = mca_mpool_rgpusm_deregister; mpool->super.mpool_release_memory = NULL; mpool->super.mpool_finalize = mca_mpool_rgpusm_finalize; mpool->super.mpool_ft_event = mca_mpool_rgpusm_ft_event; mpool->super.rcache = mca_rcache_base_module_create(mca_mpool_rgpusm_component.rcache_name); mpool->super.flags = 0; mpool->resources.reg_data = NULL; mpool->resources.sizeof_reg = sizeof(struct mca_mpool_common_cuda_reg_t); mpool->resources.register_mem = cuda_openmemhandle; mpool->resources.deregister_mem = cuda_closememhandle; OBJ_CONSTRUCT(&mpool->reg_list, ompi_free_list_t); ompi_free_list_init_new(&mpool->reg_list, mpool->resources.sizeof_reg, opal_cache_line_size, OBJ_CLASS(mca_mpool_base_registration_t), 0,opal_cache_line_size, 0, -1, 32, NULL); OBJ_CONSTRUCT(&mpool->lru_list, opal_list_t); mpool->stat_cache_hit = mpool->stat_cache_miss = mpool->stat_evicted = 0; mpool->stat_cache_found = mpool->stat_cache_notfound = 0; mpool->stat_cache_valid = mpool->stat_cache_invalid = 0; }
/* * Initializes the mpool module. */ void mca_mpool_rdma_module_init(mca_mpool_rdma_module_t* mpool) { mpool->super.mpool_component = &mca_mpool_rdma_component.super; mpool->super.mpool_base = NULL; /* no base .. */ mpool->super.mpool_alloc = mca_mpool_rdma_alloc; mpool->super.mpool_realloc = mca_mpool_rdma_realloc; mpool->super.mpool_free = mca_mpool_rdma_free; mpool->super.mpool_register = mca_mpool_rdma_register; mpool->super.mpool_find = mca_mpool_rdma_find; mpool->super.mpool_deregister = mca_mpool_rdma_deregister; mpool->super.mpool_release_memory = mca_mpool_rdma_release_memory; if(mca_mpool_rdma_component.print_stats == true) mpool->super.mpool_finalize = mca_mpool_rdma_finalize; else mpool->super.mpool_finalize = NULL; mpool->super.rcache = mca_rcache_base_module_create(mca_mpool_rdma_component.rcache_name); mpool->super.flags = MCA_MPOOL_FLAGS_MPI_ALLOC_MEM; OBJ_CONSTRUCT(&mpool->reg_list, ompi_free_list_t); ompi_free_list_init(&mpool->reg_list, mpool->resources.sizeof_reg, OBJ_CLASS(mca_mpool_base_registration_t), 0, -1, 32, NULL); OBJ_CONSTRUCT(&mpool->mru_list, opal_list_t); mpool->stat_cache_hit = mpool->stat_cache_miss = mpool->stat_evicted = 0; mpool->stat_cache_found = mpool->stat_cache_notfound = 0; }
/* * Initializes the mpool module. */ void mca_mpool_rdma_module_init(mca_mpool_rdma_module_t* mpool) { mpool->super.mpool_component = &mca_mpool_rdma_component.super; mpool->super.mpool_base = NULL; /* no base .. */ mpool->super.mpool_alloc = mca_mpool_rdma_alloc; mpool->super.mpool_realloc = mca_mpool_rdma_realloc; mpool->super.mpool_free = mca_mpool_rdma_free; mpool->super.mpool_register = mca_mpool_rdma_register; mpool->super.mpool_find = mca_mpool_rdma_find; mpool->super.mpool_deregister = mca_mpool_rdma_deregister; mpool->super.mpool_release_memory = mca_mpool_rdma_release_memory; mpool->super.mpool_finalize = mca_mpool_rdma_finalize; mpool->super.mpool_ft_event = mca_mpool_rdma_ft_event; mpool->super.rcache = mca_rcache_base_module_create(mca_mpool_rdma_component.rcache_name); mpool->super.flags = MCA_MPOOL_FLAGS_MPI_ALLOC_MEM; OBJ_CONSTRUCT(&mpool->reg_list, ompi_free_list_t); ompi_free_list_init_new(&mpool->reg_list, mpool->resources.sizeof_reg, opal_cache_line_size, OBJ_CLASS(mca_mpool_base_registration_t), 0,opal_cache_line_size, 0, -1, 32, NULL); OBJ_CONSTRUCT(&mpool->mru_list, opal_list_t); OBJ_CONSTRUCT(&mpool->gc_list, opal_list_t); mpool->stat_cache_hit = mpool->stat_cache_miss = mpool->stat_evicted = 0; mpool->stat_cache_found = mpool->stat_cache_notfound = 0; /* Set this here (vs in component.c) because ompi_mpi_leave_pinned* may have been set after MCA params were read (e.g., by the openib btl) */ mca_mpool_rdma_component.leave_pinned = (int) (1 == ompi_mpi_leave_pinned || ompi_mpi_leave_pinned_pipeline); }
static void mca_mpool_grdma_pool_contructor (mca_mpool_grdma_pool_t *pool) { memset ((void *)((uintptr_t)pool + sizeof (pool->super)), 0, sizeof (*pool) - sizeof (pool->super)); OBJ_CONSTRUCT(&pool->lru_list, opal_list_t); OBJ_CONSTRUCT(&pool->gc_list, opal_list_t); pool->rcache = mca_rcache_base_module_create(mca_mpool_grdma_component.rcache_name); }
static int init_vader_endpoint (struct mca_btl_base_endpoint_t *ep, struct opal_proc_t *proc, int remote_rank) { mca_btl_vader_component_t *component = &mca_btl_vader_component; union vader_modex_t *modex; size_t msg_size; int rc; OBJ_CONSTRUCT(ep, mca_btl_vader_endpoint_t); ep->peer_smp_rank = remote_rank; if (remote_rank != MCA_BTL_VADER_LOCAL_RANK) { OPAL_MODEX_RECV(rc, &component->super.btl_version, &proc->proc_name, (void **) &modex, &msg_size); if (OPAL_SUCCESS != rc) { return rc; } /* attatch to the remote segment */ #if OPAL_BTL_VADER_HAVE_XPMEM if (MCA_BTL_VADER_XPMEM == mca_btl_vader_component.single_copy_mechanism) { /* always use xpmem if it is available */ ep->segment_data.xpmem.apid = xpmem_get (modex->xpmem.seg_id, XPMEM_RDWR, XPMEM_PERMIT_MODE, (void *) 0666); ep->segment_data.xpmem.rcache = mca_rcache_base_module_create("vma"); (void) vader_get_registation (ep, modex->xpmem.segment_base, mca_btl_vader_component.segment_size, MCA_MPOOL_FLAGS_PERSIST, (void **) &ep->segment_base); } else { #endif /* store a copy of the segment information for detach */ ep->segment_data.other.seg_ds = malloc (msg_size); if (NULL == ep->segment_data.other.seg_ds) { return OPAL_ERR_OUT_OF_RESOURCE; } memcpy (ep->segment_data.other.seg_ds, &modex->seg_ds, msg_size); ep->segment_base = opal_shmem_segment_attach (ep->segment_data.other.seg_ds); if (NULL == ep->segment_base) { return OPAL_ERROR; } #if OPAL_BTL_VADER_HAVE_XPMEM } #endif OBJ_CONSTRUCT(&ep->lock, opal_mutex_t); free (modex); } else { /* set up the segment base so we can calculate a virtual to real for local pointers */ ep->segment_base = component->my_segment; } ep->fifo = (struct vader_fifo_t *) ep->segment_base; return OPAL_SUCCESS; }
static int init_vader_endpoint (struct mca_btl_base_endpoint_t *ep, struct ompi_proc_t *proc, int remote_rank) { const int fbox_in_offset = MCA_BTL_VADER_LOCAL_RANK - (MCA_BTL_VADER_LOCAL_RANK > remote_rank); const int fbox_out_offset = remote_rank - (MCA_BTL_VADER_LOCAL_RANK < remote_rank); mca_btl_vader_component_t *component = &mca_btl_vader_component; struct vader_modex_t *modex; size_t msg_size; int rc; ep->peer_smp_rank = remote_rank; if (remote_rank != MCA_BTL_VADER_LOCAL_RANK) { if (OMPI_SUCCESS != (rc = ompi_modex_recv(&component->super.btl_version, proc, (void *)&modex, &msg_size))) { return rc; } /* attatch to the remote segment */ #if OMPI_BTL_VADER_HAVE_XPMEM /* always use xpmem if it is available */ ep->apid = xpmem_get (modex->seg_id, XPMEM_RDWR, XPMEM_PERMIT_MODE, (void *) 0666); ep->rcache = mca_rcache_base_module_create("vma"); (void) vader_get_registation (ep, modex->segment_base, mca_btl_vader_component.segment_size, MCA_MPOOL_FLAGS_PERSIST, (void **) &ep->segment_base); #else int offset = offsetof (opal_shmem_ds_t, seg_name); memcpy (&ep->seg_ds, modex->buffer, offset); memcpy (&ep->seg_ds.seg_base_addr, modex->buffer + offset, sizeof (ep->seg_ds.seg_base_addr)); offset += sizeof (ep->seg_ds.seg_base_addr); strncpy (ep->seg_ds.seg_name, modex->buffer + offset, OPAL_PATH_MAX); ep->segment_base = opal_shmem_segment_attach (&ep->seg_ds); if (NULL == ep->segment_base) { return rc; } #endif free (modex); ep->next_fbox_out = 0; ep->next_fbox_in = 0; ep->next_sequence = 0; ep->expected_sequence = 0; ep->fbox_in = (struct mca_btl_vader_fbox_t * restrict) (ep->segment_base + MCA_BTL_VADER_FIFO_SIZE + fbox_in_offset * MCA_BTL_VADER_FBOX_PEER_SIZE); ep->fbox_out = (struct mca_btl_vader_fbox_t * restrict) (component->my_segment + MCA_BTL_VADER_FIFO_SIZE + fbox_out_offset * MCA_BTL_VADER_FBOX_PEER_SIZE); } else {
static int mca_btl_scif_setup_rcache (mca_btl_scif_module_t *scif_module) { mca_rcache_base_resources_t rcache_resources; int rc; /* initialize the grdma rcache */ rcache_resources.cache_name = "scif"; rcache_resources.reg_data = (void *) scif_module; rcache_resources.sizeof_reg = sizeof (mca_btl_scif_reg_t); rcache_resources.register_mem = scif_reg_mem; rcache_resources.deregister_mem = scif_dereg_mem; scif_module->rcache = mca_rcache_base_module_create ("grdma", scif_module, &rcache_resources); if (NULL == scif_module->rcache) { BTL_ERROR(("error creating grdma rcache")); return OPAL_ERROR; } /* setup free lists for fragments. dma fragments will be used for * rma operations and in-place sends. eager frags will be used for * buffered sends. */ rc = opal_free_list_init (&scif_module->dma_frags, sizeof (mca_btl_scif_dma_frag_t), 64, OBJ_CLASS(mca_btl_scif_dma_frag_t), 128, opal_getpagesize (), mca_btl_scif_component.scif_free_list_num, mca_btl_scif_component.scif_free_list_max, mca_btl_scif_component.scif_free_list_inc, NULL, 0, NULL, NULL, NULL); if (OPAL_UNLIKELY(OPAL_SUCCESS != rc)) { return rc; } rc = opal_free_list_init (&scif_module->eager_frags, sizeof (mca_btl_scif_eager_frag_t), 8, OBJ_CLASS(mca_btl_scif_eager_frag_t), 128 + scif_module->super.btl_eager_limit, 64, mca_btl_scif_component.scif_free_list_num, mca_btl_scif_component.scif_free_list_max, mca_btl_scif_component.scif_free_list_inc, NULL, 0, NULL, NULL, NULL); if (OPAL_UNLIKELY(OPAL_SUCCESS != rc)) { BTL_ERROR(("error creating eager receive fragment free list")); return rc; } return OPAL_SUCCESS; }
static int init_vader_endpoint (struct mca_btl_base_endpoint_t *ep, struct ompi_proc_t *proc, int remote_rank) { const int fbox_in_offset = MCA_BTL_VADER_LOCAL_RANK - (MCA_BTL_VADER_LOCAL_RANK > remote_rank); const int fbox_out_offset = remote_rank - (MCA_BTL_VADER_LOCAL_RANK < remote_rank); mca_btl_vader_component_t *component = &mca_btl_vader_component; struct vader_modex_t *modex; size_t msg_size; int rc; ep->peer_smp_rank = remote_rank; if (remote_rank != MCA_BTL_VADER_LOCAL_RANK) { if (OMPI_SUCCESS != (rc = ompi_modex_recv(&component->super.btl_version, proc, (void *)&modex, &msg_size))) { return rc; } ep->apid = xpmem_get (modex->seg_id, XPMEM_RDWR, XPMEM_PERMIT_MODE, (void *) 0666); ep->rcache = mca_rcache_base_module_create("vma"); ep->next_fbox_out = 0; ep->next_fbox_in = 0; /* attatch to the remote segment */ (void) vader_get_registation (ep, modex->segment_base, mca_btl_vader_component.segment_size, MCA_MPOOL_FLAGS_PERSIST, (void **) &ep->segment_base); ep->fifo = (struct vader_fifo_t *) ep->segment_base; ep->fbox_in = ep->segment_base + 4096 + fbox_in_offset * MCA_BTL_VADER_FBOX_PEER_SIZE; ep->fbox_out = component->my_segment + 4096 + fbox_out_offset * MCA_BTL_VADER_FBOX_PEER_SIZE; } else { /* set up the segment base so we can calculate a virtual to real for local pointers */ ep->segment_base = component->my_segment; ep->fifo = (struct vader_fifo_t *) ep->segment_base; } return OMPI_SUCCESS; }