slight change to allocator/memory pool interface
This commit was SVN r6115.
Этот коммит содержится в:
родитель
119a5c786f
Коммит
895fd2e23d
@ -21,6 +21,10 @@
|
|||||||
#define MCA_ALLOCATOR_H
|
#define MCA_ALLOCATOR_H
|
||||||
#include "mca/mca.h"
|
#include "mca/mca.h"
|
||||||
|
|
||||||
|
struct mca_bmi_base_registration_t;
|
||||||
|
struct mca_bmi_base_resources_t;
|
||||||
|
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -30,17 +34,25 @@ struct mca_allocator_base_module_t;
|
|||||||
/**
|
/**
|
||||||
* The allocate function typedef for the function to be provided by the component.
|
* The allocate function typedef for the function to be provided by the component.
|
||||||
*/
|
*/
|
||||||
typedef void* (*mca_allocator_base_module_alloc_fn_t)(struct mca_allocator_base_module_t*, size_t size, size_t align, void** user_out);
|
typedef void* (*mca_allocator_base_module_alloc_fn_t)(
|
||||||
|
struct mca_allocator_base_module_t*,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The realloc function typedef
|
* The realloc function typedef
|
||||||
*/
|
*/
|
||||||
typedef void* (*mca_allocator_base_module_realloc_fn_t)(struct mca_allocator_base_module_t*, void*, size_t, void** user_out);
|
typedef void* (*mca_allocator_base_module_realloc_fn_t)(
|
||||||
|
struct mca_allocator_base_module_t*,
|
||||||
|
void*, size_t,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free function typedef
|
* Free function typedef
|
||||||
*/
|
*/
|
||||||
typedef void(*mca_allocator_base_module_free_fn_t)(struct mca_allocator_base_module_t*, void *);
|
typedef void(*mca_allocator_base_module_free_fn_t)(
|
||||||
|
struct mca_allocator_base_module_t*, void *);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,9 +84,10 @@ struct mca_allocator_base_module_t {
|
|||||||
/**< Free memory */
|
/**< Free memory */
|
||||||
mca_allocator_base_module_compact_fn_t alc_compact;
|
mca_allocator_base_module_compact_fn_t alc_compact;
|
||||||
/**< Return memory */
|
/**< Return memory */
|
||||||
mca_allocator_base_module_finalize_fn_t alc_finalize;
|
mca_allocator_base_module_finalize_fn_t alc_finalize;
|
||||||
/**< Finalize and free everything */
|
/**< Finalize and free everything */
|
||||||
void* user_in;
|
/* memory pool and resources */
|
||||||
|
struct mca_mpool_base_module_t* alc_mpool;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Convenience typedef.
|
* Convenience typedef.
|
||||||
@ -87,14 +100,19 @@ typedef struct mca_allocator_base_module_t mca_allocator_base_module_t;
|
|||||||
* provided by the module to the allocator framework.
|
* provided by the module to the allocator framework.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef void* (*mca_allocator_base_component_segment_alloc_fn_t)(size_t* size, void* user_in, void** user_out);
|
typedef void* (*mca_allocator_base_component_segment_alloc_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* module,
|
||||||
|
size_t* size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A function to free memory from the control of the allocator framework
|
* A function to free memory from the control of the allocator framework
|
||||||
* back to the system. This function is to be provided by the module to the
|
* back to the system. This function is to be provided by the module to the
|
||||||
* allocator frmaework.
|
* allocator frmaework.
|
||||||
*/
|
*/
|
||||||
typedef void* (*mca_allocator_base_component_segment_free_fn_t)(void* segment);
|
typedef void* (*mca_allocator_base_component_segment_free_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* module,
|
||||||
|
void* segment);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,7 +123,7 @@ typedef struct mca_allocator_base_module_t*
|
|||||||
bool enable_mpi_threads,
|
bool enable_mpi_threads,
|
||||||
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
||||||
mca_allocator_base_component_segment_free_fn_t segment_free,
|
mca_allocator_base_component_segment_free_fn_t segment_free,
|
||||||
void* user_in
|
struct mca_mpool_base_module_t* mpool
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,7 +77,7 @@ mca_allocator_base_module_t* mca_allocator_basic_component_init(
|
|||||||
bool enable_mpi_threads,
|
bool enable_mpi_threads,
|
||||||
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
||||||
mca_allocator_base_component_segment_free_fn_t segment_free,
|
mca_allocator_base_component_segment_free_fn_t segment_free,
|
||||||
void* user_in)
|
struct mca_mpool_base_module_t* mpool)
|
||||||
{
|
{
|
||||||
mca_allocator_basic_module_t *module = (mca_allocator_basic_module_t *)
|
mca_allocator_basic_module_t *module = (mca_allocator_basic_module_t *)
|
||||||
malloc(sizeof(mca_allocator_basic_module_t));
|
malloc(sizeof(mca_allocator_basic_module_t));
|
||||||
@ -90,7 +90,7 @@ mca_allocator_base_module_t* mca_allocator_basic_component_init(
|
|||||||
module->super.alc_free = mca_allocator_basic_free;
|
module->super.alc_free = mca_allocator_basic_free;
|
||||||
module->super.alc_compact = mca_allocator_basic_compact;
|
module->super.alc_compact = mca_allocator_basic_compact;
|
||||||
module->super.alc_finalize = mca_allocator_basic_finalize;
|
module->super.alc_finalize = mca_allocator_basic_finalize;
|
||||||
module->super.user_in = user_in;
|
module->super.alc_mpool = mpool;
|
||||||
module->seg_alloc = segment_alloc;
|
module->seg_alloc = segment_alloc;
|
||||||
module->seg_free = segment_free;
|
module->seg_free = segment_free;
|
||||||
OBJ_CONSTRUCT(&module->seg_list, ompi_list_t);
|
OBJ_CONSTRUCT(&module->seg_list, ompi_list_t);
|
||||||
@ -161,7 +161,7 @@ void *mca_allocator_basic_alloc(
|
|||||||
mca_allocator_base_module_t * base,
|
mca_allocator_base_module_t * base,
|
||||||
size_t size,
|
size_t size,
|
||||||
size_t align,
|
size_t align,
|
||||||
void** user_out)
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_allocator_basic_module_t* module = (mca_allocator_basic_module_t*)base;
|
mca_allocator_basic_module_t* module = (mca_allocator_basic_module_t*)base;
|
||||||
mca_allocator_basic_segment_t* seg;
|
mca_allocator_basic_segment_t* seg;
|
||||||
@ -197,7 +197,7 @@ void *mca_allocator_basic_alloc(
|
|||||||
|
|
||||||
/* request additional block */
|
/* request additional block */
|
||||||
allocated_size = (unsigned char)size;
|
allocated_size = (unsigned char)size;
|
||||||
if(NULL == (addr = (unsigned char *)module->seg_alloc(&allocated_size, module->super.user_in, user_out))) {
|
if(NULL == (addr = (unsigned char *)module->seg_alloc(module->super.alc_mpool, &allocated_size, registration))) {
|
||||||
OMPI_THREAD_UNLOCK(&module->seg_lock);
|
OMPI_THREAD_UNLOCK(&module->seg_lock);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -241,13 +241,13 @@ void * mca_allocator_basic_realloc(
|
|||||||
mca_allocator_base_module_t * base,
|
mca_allocator_base_module_t * base,
|
||||||
void * ptr,
|
void * ptr,
|
||||||
size_t size,
|
size_t size,
|
||||||
void** user_out)
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
unsigned char* addr = ((unsigned char*)ptr) - sizeof(size_t);
|
unsigned char* addr = ((unsigned char*)ptr) - sizeof(size_t);
|
||||||
size_t alloc_size = *(size_t*)addr;
|
size_t alloc_size = *(size_t*)addr;
|
||||||
if(size <= alloc_size)
|
if(size <= alloc_size)
|
||||||
return ptr;
|
return ptr;
|
||||||
addr = (unsigned char *)mca_allocator_basic_alloc(base,size,0, user_out);
|
addr = (unsigned char *)mca_allocator_basic_alloc(base,size,0,registration);
|
||||||
if(addr == NULL)
|
if(addr == NULL)
|
||||||
return addr;
|
return addr;
|
||||||
memcpy(addr,ptr,alloc_size);
|
memcpy(addr,ptr,alloc_size);
|
||||||
|
@ -74,7 +74,7 @@ mca_allocator_base_module_t* mca_allocator_basic_component_init(
|
|||||||
bool enable_mpi_threads,
|
bool enable_mpi_threads,
|
||||||
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
||||||
mca_allocator_base_component_segment_free_fn_t segment_free,
|
mca_allocator_base_component_segment_free_fn_t segment_free,
|
||||||
void* user_in
|
struct mca_mpool_base_module_t* module
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,7 +92,7 @@ mca_allocator_base_module_t* mca_allocator_basic_component_init(
|
|||||||
mca_allocator_base_module_t * mem,
|
mca_allocator_base_module_t * mem,
|
||||||
size_t size,
|
size_t size,
|
||||||
size_t align,
|
size_t align,
|
||||||
void** user_out);
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to resize the passed region of memory into a larger or a smaller
|
* Attempts to resize the passed region of memory into a larger or a smaller
|
||||||
@ -112,7 +112,7 @@ mca_allocator_base_module_t* mca_allocator_basic_component_init(
|
|||||||
mca_allocator_base_module_t * mem,
|
mca_allocator_base_module_t * mem,
|
||||||
void * ptr,
|
void * ptr,
|
||||||
size_t size,
|
size_t size,
|
||||||
void** user_out);
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees the passed region of memory
|
* Frees the passed region of memory
|
||||||
|
@ -24,15 +24,18 @@ struct mca_allocator_base_module_t* mca_allocator_bucket_module_init(
|
|||||||
bool enable_mpi_threads,
|
bool enable_mpi_threads,
|
||||||
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
||||||
mca_allocator_base_component_segment_free_fn_t segment_free,
|
mca_allocator_base_component_segment_free_fn_t segment_free,
|
||||||
void* user
|
struct mca_mpool_base_module_t* mpool
|
||||||
);
|
);
|
||||||
|
|
||||||
int mca_allocator_bucket_module_open(void);
|
int mca_allocator_bucket_module_open(void);
|
||||||
|
|
||||||
int mca_allocator_bucket_module_close(void);
|
int mca_allocator_bucket_module_close(void);
|
||||||
|
|
||||||
void * mca_allocator_bucket_alloc_wrapper(struct mca_allocator_base_module_t* allocator,
|
void * mca_allocator_bucket_alloc_wrapper(
|
||||||
size_t size, size_t align, void** user_out);
|
struct mca_allocator_base_module_t* allocator,
|
||||||
|
size_t size, size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
static int mca_allocator_num_buckets;
|
static int mca_allocator_num_buckets;
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +51,7 @@ struct mca_allocator_base_module_t* mca_allocator_bucket_module_init(
|
|||||||
bool enable_mpi_threads,
|
bool enable_mpi_threads,
|
||||||
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
mca_allocator_base_component_segment_alloc_fn_t segment_alloc,
|
||||||
mca_allocator_base_component_segment_free_fn_t segment_free,
|
mca_allocator_base_component_segment_free_fn_t segment_free,
|
||||||
void* user_in)
|
struct mca_mpool_base_module_t* mpool)
|
||||||
{
|
{
|
||||||
size_t alloc_size = sizeof(mca_allocator_bucket_t);
|
size_t alloc_size = sizeof(mca_allocator_bucket_t);
|
||||||
mca_allocator_bucket_t * retval;
|
mca_allocator_bucket_t * retval;
|
||||||
@ -56,8 +59,10 @@ struct mca_allocator_base_module_t* mca_allocator_bucket_module_init(
|
|||||||
if(NULL == allocator) {
|
if(NULL == allocator) {
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
retval = mca_allocator_bucket_init((mca_allocator_base_module_t *) allocator, mca_allocator_num_buckets,
|
retval = mca_allocator_bucket_init((mca_allocator_base_module_t *) allocator,
|
||||||
segment_alloc, segment_free);
|
mca_allocator_num_buckets,
|
||||||
|
segment_alloc,
|
||||||
|
segment_free);
|
||||||
if(NULL == retval) {
|
if(NULL == retval) {
|
||||||
free(allocator);
|
free(allocator);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
@ -67,7 +72,7 @@ struct mca_allocator_base_module_t* mca_allocator_bucket_module_init(
|
|||||||
allocator->super.alc_free = mca_allocator_bucket_free;
|
allocator->super.alc_free = mca_allocator_bucket_free;
|
||||||
allocator->super.alc_compact = mca_allocator_bucket_cleanup;
|
allocator->super.alc_compact = mca_allocator_bucket_cleanup;
|
||||||
allocator->super.alc_finalize = mca_allocator_bucket_finalize;
|
allocator->super.alc_finalize = mca_allocator_bucket_finalize;
|
||||||
allocator->super.user_in = user_in;
|
allocator->super.alc_mpool = mpool;
|
||||||
return((mca_allocator_base_module_t *) allocator);
|
return((mca_allocator_base_module_t *) allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,13 +87,16 @@ int mca_allocator_bucket_module_close(void) {
|
|||||||
return(OMPI_SUCCESS);
|
return(OMPI_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void * mca_allocator_bucket_alloc_wrapper(struct mca_allocator_base_module_t* allocator,
|
void * mca_allocator_bucket_alloc_wrapper(
|
||||||
size_t size, size_t align, void** user_out)
|
struct mca_allocator_base_module_t* allocator,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
if(0 == align){
|
if(0 == align){
|
||||||
return(mca_allocator_bucket_alloc(allocator, size, user_out));
|
return(mca_allocator_bucket_alloc(allocator, size, registration));
|
||||||
}
|
}
|
||||||
return(mca_allocator_bucket_alloc_align(allocator, size, align, user_out));
|
return(mca_allocator_bucket_alloc_align(allocator, size, align, registration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,10 +32,11 @@
|
|||||||
* Initializes the mca_allocator_bucket_options_t data structure for the passed
|
* Initializes the mca_allocator_bucket_options_t data structure for the passed
|
||||||
* parameters.
|
* parameters.
|
||||||
*/
|
*/
|
||||||
mca_allocator_bucket_t * mca_allocator_bucket_init(mca_allocator_base_module_t * mem,
|
mca_allocator_bucket_t * mca_allocator_bucket_init(
|
||||||
int num_buckets,
|
mca_allocator_base_module_t * mem,
|
||||||
mca_allocator_base_component_segment_alloc_fn_t get_mem_funct,
|
int num_buckets,
|
||||||
mca_allocator_base_component_segment_free_fn_t free_mem_funct)
|
mca_allocator_base_component_segment_alloc_fn_t get_mem_funct,
|
||||||
|
mca_allocator_base_component_segment_free_fn_t free_mem_funct)
|
||||||
{
|
{
|
||||||
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
||||||
int i;
|
int i;
|
||||||
@ -67,8 +68,10 @@ mca_allocator_bucket_t * mca_allocator_bucket_init(mca_allocator_base_module_t *
|
|||||||
* region or NULL if there was an error
|
* region or NULL if there was an error
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void * mca_allocator_bucket_alloc(mca_allocator_base_module_t * mem,
|
void * mca_allocator_bucket_alloc(
|
||||||
size_t size, void** user_out)
|
mca_allocator_base_module_t * mem,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
||||||
/* initialize for the later bit shifts */
|
/* initialize for the later bit shifts */
|
||||||
@ -107,7 +110,7 @@ void * mca_allocator_bucket_alloc(mca_allocator_base_module_t * mem,
|
|||||||
allocated_size += sizeof(mca_allocator_bucket_segment_head_t);
|
allocated_size += sizeof(mca_allocator_bucket_segment_head_t);
|
||||||
/* attempt to get the memory */
|
/* attempt to get the memory */
|
||||||
segment_header = (mca_allocator_bucket_segment_head_t *)
|
segment_header = (mca_allocator_bucket_segment_head_t *)
|
||||||
mem_options->get_mem_fn(&allocated_size, mem_options->super.user_in, user_out);
|
mem_options->get_mem_fn(mem_options->super.alc_mpool, &allocated_size, registration);
|
||||||
if(NULL == segment_header) {
|
if(NULL == segment_header) {
|
||||||
/* release the lock */
|
/* release the lock */
|
||||||
OMPI_THREAD_UNLOCK(&(mem_options->buckets[bucket_num].lock));
|
OMPI_THREAD_UNLOCK(&(mem_options->buckets[bucket_num].lock));
|
||||||
@ -147,8 +150,11 @@ void * mca_allocator_bucket_alloc(mca_allocator_base_module_t * mem,
|
|||||||
/*
|
/*
|
||||||
* allocates an aligned region of memory
|
* allocates an aligned region of memory
|
||||||
*/
|
*/
|
||||||
void * mca_allocator_bucket_alloc_align(mca_allocator_base_module_t * mem,
|
void * mca_allocator_bucket_alloc_align(
|
||||||
size_t size, size_t alignment, void** user_out)
|
mca_allocator_base_module_t * mem,
|
||||||
|
size_t size,
|
||||||
|
size_t alignment,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
||||||
int bucket_num = 1;
|
int bucket_num = 1;
|
||||||
@ -168,7 +174,7 @@ void * mca_allocator_bucket_alloc_align(mca_allocator_base_module_t * mem,
|
|||||||
bucket_size = size + sizeof(mca_allocator_bucket_chunk_header_t);
|
bucket_size = size + sizeof(mca_allocator_bucket_chunk_header_t);
|
||||||
allocated_size = aligned_max_size;
|
allocated_size = aligned_max_size;
|
||||||
/* get some memory */
|
/* get some memory */
|
||||||
ptr = mem_options->get_mem_fn(&allocated_size, mem_options->super.user_in, user_out);
|
ptr = mem_options->get_mem_fn(mem_options->super.alc_mpool, &allocated_size, registration);
|
||||||
if(NULL == ptr) {
|
if(NULL == ptr) {
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
@ -227,8 +233,11 @@ void * mca_allocator_bucket_alloc_align(mca_allocator_base_module_t * mem,
|
|||||||
/*
|
/*
|
||||||
* function to reallocate the segment of memory
|
* function to reallocate the segment of memory
|
||||||
*/
|
*/
|
||||||
void * mca_allocator_bucket_realloc(mca_allocator_base_module_t * mem,
|
void * mca_allocator_bucket_realloc(
|
||||||
void * ptr, size_t size, void** user_out)
|
mca_allocator_base_module_t * mem,
|
||||||
|
void * ptr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
mca_allocator_bucket_t * mem_options = (mca_allocator_bucket_t *) mem;
|
||||||
/* initialize for later bit shifts */
|
/* initialize for later bit shifts */
|
||||||
@ -249,7 +258,7 @@ void * mca_allocator_bucket_realloc(mca_allocator_base_module_t * mem,
|
|||||||
return(ptr);
|
return(ptr);
|
||||||
}
|
}
|
||||||
/* we need a new space in memory, so let's get it */
|
/* we need a new space in memory, so let's get it */
|
||||||
ret_ptr = mca_allocator_bucket_alloc((mca_allocator_base_module_t *) mem_options, size, user_out);
|
ret_ptr = mca_allocator_bucket_alloc((mca_allocator_base_module_t *) mem_options, size, registration);
|
||||||
if(NULL == ret_ptr) {
|
if(NULL == ret_ptr) {
|
||||||
/* we were unable to get a larger area of memory */
|
/* we were unable to get a larger area of memory */
|
||||||
return(NULL);
|
return(NULL);
|
||||||
@ -329,7 +338,7 @@ int mca_allocator_bucket_cleanup(mca_allocator_base_module_t * mem)
|
|||||||
*segment_header = segment->next_segment;
|
*segment_header = segment->next_segment;
|
||||||
/* free the memory */
|
/* free the memory */
|
||||||
if(mem_options->free_mem_fn)
|
if(mem_options->free_mem_fn)
|
||||||
mem_options->free_mem_fn(segment);
|
mem_options->free_mem_fn(mem->alc_mpool, segment);
|
||||||
} else {
|
} else {
|
||||||
/* go to next segment */
|
/* go to next segment */
|
||||||
segment_header = &((*segment_header)->next_segment);
|
segment_header = &((*segment_header)->next_segment);
|
||||||
|
@ -122,7 +122,10 @@ typedef struct mca_allocator_bucket_t mca_allocator_bucket_t;
|
|||||||
* @retval Pointer to the area of memory if the allocation was successful
|
* @retval Pointer to the area of memory if the allocation was successful
|
||||||
* @retval NULL if the allocation was unsuccessful
|
* @retval NULL if the allocation was unsuccessful
|
||||||
*/
|
*/
|
||||||
void * mca_allocator_bucket_alloc(mca_allocator_base_module_t * mem, size_t size, void** user_out);
|
void * mca_allocator_bucket_alloc(
|
||||||
|
mca_allocator_base_module_t * mem,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accepts a request for memory in a specific region defined by the
|
* Accepts a request for memory in a specific region defined by the
|
||||||
@ -139,8 +142,11 @@ typedef struct mca_allocator_bucket_t mca_allocator_bucket_t;
|
|||||||
* @retval NULL if the allocation was unsuccessful
|
* @retval NULL if the allocation was unsuccessful
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void * mca_allocator_bucket_alloc_align(mca_allocator_base_module_t * mem,
|
void * mca_allocator_bucket_alloc_align(
|
||||||
size_t size, size_t alignment, void** user_out);
|
mca_allocator_base_module_t * mem,
|
||||||
|
size_t size,
|
||||||
|
size_t alignment,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to resize the passed region of memory into a larger or a smaller
|
* Attempts to resize the passed region of memory into a larger or a smaller
|
||||||
@ -156,8 +162,11 @@ typedef struct mca_allocator_bucket_t mca_allocator_bucket_t;
|
|||||||
* @retval NULL if the allocation was unsuccessful
|
* @retval NULL if the allocation was unsuccessful
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void * mca_allocator_bucket_realloc(mca_allocator_base_module_t * mem,
|
void * mca_allocator_bucket_realloc(
|
||||||
void * ptr, size_t size, void** user_out);
|
mca_allocator_base_module_t * mem,
|
||||||
|
void * ptr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees the passed region of memory
|
* Frees the passed region of memory
|
||||||
|
@ -119,6 +119,8 @@
|
|||||||
struct mca_bmi_base_module_t;
|
struct mca_bmi_base_module_t;
|
||||||
struct mca_bmi_base_endpoint_t;
|
struct mca_bmi_base_endpoint_t;
|
||||||
struct mca_bmi_base_descriptor_t;
|
struct mca_bmi_base_descriptor_t;
|
||||||
|
struct mca_bmi_base_registration_t;
|
||||||
|
struct mca_bmi_base_resources_t;
|
||||||
|
|
||||||
|
|
||||||
/* send/recv operations require tag matching */
|
/* send/recv operations require tag matching */
|
||||||
@ -417,6 +419,7 @@ typedef int (*mca_bmi_base_module_free_fn_t)(
|
|||||||
typedef struct mca_bmi_base_descriptor_t* (*mca_bmi_base_module_prepare_fn_t)(
|
typedef struct mca_bmi_base_descriptor_t* (*mca_bmi_base_module_prepare_fn_t)(
|
||||||
struct mca_bmi_base_module_t* bmi,
|
struct mca_bmi_base_module_t* bmi,
|
||||||
struct mca_bmi_base_endpoint_t* endpoint,
|
struct mca_bmi_base_endpoint_t* endpoint,
|
||||||
|
struct mca_bmi_base_registration_t* registration,
|
||||||
struct ompi_convertor_t* convertor,
|
struct ompi_convertor_t* convertor,
|
||||||
size_t reserve,
|
size_t reserve,
|
||||||
size_t* size
|
size_t* size
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
|
ompi
|
||||||
twoodall
|
twoodall
|
||||||
gshipman
|
gshipman
|
||||||
|
@ -616,7 +616,6 @@ int mca_bmi_ib_put( mca_bmi_base_module_t* bmi,
|
|||||||
frag->endpoint = endpoint;
|
frag->endpoint = endpoint;
|
||||||
frag->sr_desc.opcode = VAPI_RDMA_WRITE;
|
frag->sr_desc.opcode = VAPI_RDMA_WRITE;
|
||||||
|
|
||||||
|
|
||||||
frag->sr_desc.remote_qp = endpoint->rem_qp_num_low;
|
frag->sr_desc.remote_qp = endpoint->rem_qp_num_low;
|
||||||
frag->sr_desc.remote_addr = (VAPI_virt_addr_t) (MT_virt_addr_t) frag->base.des_dst->seg_addr.pval;
|
frag->sr_desc.remote_addr = (VAPI_virt_addr_t) (MT_virt_addr_t) frag->base.des_dst->seg_addr.pval;
|
||||||
frag->sr_desc.r_key = frag->base.des_dst->seg_key.key32[0];
|
frag->sr_desc.r_key = frag->base.des_dst->seg_key.key32[0];
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
|
ompi
|
||||||
twoodall
|
twoodall
|
||||||
gshipman
|
gshipman
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
ompi
|
||||||
twoodall
|
twoodall
|
||||||
gshipman
|
gshipman
|
||||||
bosilca
|
bosilca
|
||||||
|
@ -32,10 +32,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "include/constants.h"
|
#include "include/constants.h"
|
||||||
|
#include "common_sm_mmap.h"
|
||||||
#include "util/output.h"
|
#include "util/output.h"
|
||||||
#include "util/sys_info.h"
|
#include "util/sys_info.h"
|
||||||
#include "util/proc_info.h"
|
#include "util/proc_info.h"
|
||||||
#include "common_sm_mmap.h"
|
|
||||||
|
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(
|
OBJ_CLASS_INSTANCE(
|
||||||
@ -212,7 +212,11 @@ mca_common_sm_mmap_t* mca_common_sm_mmap_init(size_t size, char *file_name,
|
|||||||
*
|
*
|
||||||
* @retval addr virtual address
|
* @retval addr virtual address
|
||||||
*/
|
*/
|
||||||
void* mca_common_sm_mmap_alloc(size_t* size, void* user_in, void** user_out)
|
|
||||||
|
void* mca_common_sm_mmap_seg_alloc(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
size_t* size,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_common_sm_mmap_t* map = mca_common_sm_mmap;
|
mca_common_sm_mmap_t* map = mca_common_sm_mmap;
|
||||||
mca_common_sm_file_header_t* seg = map->map_seg;
|
mca_common_sm_file_header_t* seg = map->map_seg;
|
||||||
@ -226,8 +230,8 @@ void* mca_common_sm_mmap_alloc(size_t* size, void* user_in, void** user_out)
|
|||||||
addr = map->data_addr + seg->seg_offset;
|
addr = map->data_addr + seg->seg_offset;
|
||||||
seg->seg_offset += *size;
|
seg->seg_offset += *size;
|
||||||
}
|
}
|
||||||
|
*registration = NULL;
|
||||||
ompi_atomic_unlock(&seg->seg_lock);
|
ompi_atomic_unlock(&seg->seg_lock);
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,6 +25,10 @@
|
|||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct mca_mpool_base_module_t;
|
||||||
|
struct mca_bmi_base_registration_t;
|
||||||
|
|
||||||
struct mca_common_sm_file_header_t {
|
struct mca_common_sm_file_header_t {
|
||||||
|
|
||||||
/* lock to control atomic access */
|
/* lock to control atomic access */
|
||||||
@ -86,10 +90,16 @@ OBJ_CLASS_DECLARATION(mca_common_sm_mmap_t);
|
|||||||
* @returnvalue pointer to control structure at head of file.
|
* @returnvalue pointer to control structure at head of file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mca_common_sm_mmap_t* mca_common_sm_mmap_init(size_t size, char *file_name,
|
extern mca_common_sm_mmap_t* mca_common_sm_mmap_init(
|
||||||
size_t size_ctl_structure, size_t data_seg_alignment);
|
size_t size,
|
||||||
void* mca_common_sm_mmap_alloc(size_t* size, void* user_in, void** user_out);
|
char *file_name,
|
||||||
void mca_common_sm_mmap_free(void* addr);
|
size_t size_ctl_structure,
|
||||||
|
size_t data_seg_alignment);
|
||||||
|
|
||||||
|
extern void* mca_common_sm_mmap_seg_alloc(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
size_t* size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Instance that is shared between components that use shared memory
|
* Instance that is shared between components that use shared memory
|
||||||
|
@ -27,12 +27,14 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct mca_common_vapi_hca_pd_t{
|
struct mca_bmi_base_resources_t {
|
||||||
VAPI_hca_hndl_t hca; /* the hca (nic) */
|
VAPI_hca_hndl_t hca; /* the hca (nic) */
|
||||||
VAPI_pd_hndl_t pd_tag; /* the protection domain */
|
VAPI_pd_hndl_t pd_tag; /* the protection domain */
|
||||||
}; typedef struct mca_common_vapi_hca_pd_t mca_common_vapi_hca_pd_t;
|
};
|
||||||
|
typedef struct mca_bmi_base_resources_t mca_bmi_base_resources_t;
|
||||||
|
|
||||||
struct mca_common_vapi_memhandle_t {
|
|
||||||
|
struct mca_bmi_base_registration_t {
|
||||||
VAPI_mr_hndl_t hndl;
|
VAPI_mr_hndl_t hndl;
|
||||||
/* Memory region handle */
|
/* Memory region handle */
|
||||||
|
|
||||||
@ -44,7 +46,7 @@ struct mca_common_vapi_memhandle_t {
|
|||||||
/* Remote key to registered memory, need to send this
|
/* Remote key to registered memory, need to send this
|
||||||
* to remote processes for incoming RDMA ops */
|
* to remote processes for incoming RDMA ops */
|
||||||
};
|
};
|
||||||
typedef struct mca_common_vapi_memhandle_t mca_common_vapi_memhandle_t;
|
typedef struct mca_bmi_base_registration_t mca_bmi_base_registration_t;
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,8 @@ struct mca_mpool_base_selected_module_t {
|
|||||||
ompi_list_item_t super;
|
ompi_list_item_t super;
|
||||||
mca_mpool_base_component_t *mpool_component;
|
mca_mpool_base_component_t *mpool_component;
|
||||||
mca_mpool_base_module_t *mpool_module;
|
mca_mpool_base_module_t *mpool_module;
|
||||||
|
struct mca_bmi_base_module_t *mpool_bmi;
|
||||||
|
struct mca_bmi_base_resources_t *mpool_resources;
|
||||||
};
|
};
|
||||||
typedef struct mca_mpool_base_selected_module_t mca_mpool_base_selected_module_t;
|
typedef struct mca_mpool_base_selected_module_t mca_mpool_base_selected_module_t;
|
||||||
|
|
||||||
@ -65,7 +67,8 @@ typedef struct mca_mpool_base_key_t mca_mpool_base_key_t;
|
|||||||
struct mca_mpool_base_reg_mpool_t
|
struct mca_mpool_base_reg_mpool_t
|
||||||
{
|
{
|
||||||
mca_mpool_base_module_t * mpool; /**< the registered memory pool */
|
mca_mpool_base_module_t * mpool; /**< the registered memory pool */
|
||||||
void * user; /**< user specific information */
|
struct mca_bmi_base_module_t *bmi_module; /**< bmi that registered the memory */
|
||||||
|
struct mca_bmi_base_registration_t* bmi_registration; /**< bmi specific info associated w/ registration */
|
||||||
};
|
};
|
||||||
typedef struct mca_mpool_base_reg_mpool_t mca_mpool_base_reg_mpool_t;
|
typedef struct mca_mpool_base_reg_mpool_t mca_mpool_base_reg_mpool_t;
|
||||||
|
|
||||||
@ -87,14 +90,14 @@ typedef struct mca_mpool_base_chunk_t mca_mpool_base_chunk_t;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
OMPI_DECLSPEC int mca_mpool_base_open(void);
|
OMPI_DECLSPEC int mca_mpool_base_open(void);
|
||||||
OMPI_DECLSPEC int mca_mpool_base_init(bool enable_progress_threads,
|
OMPI_DECLSPEC int mca_mpool_base_init(bool enable_progress_threads, bool enable_mpi_threads);
|
||||||
bool enable_mpi_threads);
|
|
||||||
OMPI_DECLSPEC int mca_mpool_base_close(void);
|
OMPI_DECLSPEC int mca_mpool_base_close(void);
|
||||||
OMPI_DECLSPEC mca_mpool_base_component_t* mca_mpool_base_component_lookup(const char* name);
|
OMPI_DECLSPEC mca_mpool_base_component_t* mca_mpool_base_component_lookup(const char* name);
|
||||||
OMPI_DECLSPEC mca_mpool_base_module_t* mca_mpool_base_module_lookup(const char* name);
|
OMPI_DECLSPEC mca_mpool_base_module_t* mca_mpool_base_module_create(
|
||||||
OMPI_DECLSPEC mca_mpool_base_module_t* mca_mpool_base_module_init(const char* name);
|
const char* name,
|
||||||
OMPI_DECLSPEC mca_mpool_base_module_t* mca_mpool_base_module_create(const char* name, void* user);
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_resources_t* bmi_resources);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Globals
|
* Globals
|
||||||
*/
|
*/
|
||||||
|
@ -55,7 +55,10 @@ int mca_mpool_base_tree_node_compare(void * key1, void * key2)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int mca_mpool_base_insert(void * addr, size_t size, mca_mpool_base_module_t* mpool, void* user_data)
|
int mca_mpool_base_insert(void * addr, size_t size,
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_registration_t* registration)
|
||||||
{
|
{
|
||||||
ompi_list_item_t *item;
|
ompi_list_item_t *item;
|
||||||
int rc;
|
int rc;
|
||||||
@ -70,7 +73,8 @@ int mca_mpool_base_insert(void * addr, size_t size, mca_mpool_base_module_t* mpo
|
|||||||
if(rc != OMPI_SUCCESS)
|
if(rc != OMPI_SUCCESS)
|
||||||
return rc;
|
return rc;
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[0].mpool = mpool;
|
((mca_mpool_base_chunk_t *) item)->mpools[0].mpool = mpool;
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[0].user = user_data;
|
((mca_mpool_base_chunk_t *) item)->mpools[0].bmi_module = bmi;
|
||||||
|
((mca_mpool_base_chunk_t *) item)->mpools[0].bmi_registration = registration;
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,12 +126,12 @@ void * mca_mpool_base_alloc(size_t size, ompi_info_t * info)
|
|||||||
int num_modules = ompi_list_get_size(&mca_mpool_base_modules);
|
int num_modules = ompi_list_get_size(&mca_mpool_base_modules);
|
||||||
int reg_module_num = 0;
|
int reg_module_num = 0;
|
||||||
int i, num_keys;
|
int i, num_keys;
|
||||||
mca_mpool_base_module_t * current;
|
mca_mpool_base_selected_module_t * current;
|
||||||
mca_mpool_base_module_t * no_reg_function = NULL;
|
mca_mpool_base_selected_module_t * no_reg_function = NULL;
|
||||||
mca_mpool_base_module_t ** has_reg_function = (mca_mpool_base_module_t **)
|
mca_mpool_base_selected_module_t ** has_reg_function = (mca_mpool_base_selected_module_t **)
|
||||||
malloc(num_modules * sizeof(mca_mpool_base_module_t *));
|
malloc(num_modules * sizeof(mca_mpool_base_module_t *));
|
||||||
|
struct mca_bmi_base_registration_t * registration;
|
||||||
void * mem = NULL;
|
void * mem = NULL;
|
||||||
void * user;
|
|
||||||
char * key;
|
char * key;
|
||||||
bool match_found;
|
bool match_found;
|
||||||
|
|
||||||
@ -137,8 +141,8 @@ void * mca_mpool_base_alloc(size_t size, ompi_info_t * info)
|
|||||||
item != ompi_list_get_end(&mca_mpool_base_modules);
|
item != ompi_list_get_end(&mca_mpool_base_modules);
|
||||||
item = ompi_list_get_next(item))
|
item = ompi_list_get_next(item))
|
||||||
{
|
{
|
||||||
current = ((mca_mpool_base_selected_module_t *) item)->mpool_module;
|
current = ((mca_mpool_base_selected_module_t *) item);
|
||||||
if(NULL == current->mpool_register)
|
if(NULL == current->mpool_module->mpool_register)
|
||||||
{
|
{
|
||||||
no_reg_function = current;
|
no_reg_function = current;
|
||||||
}
|
}
|
||||||
@ -160,12 +164,12 @@ void * mca_mpool_base_alloc(size_t size, ompi_info_t * info)
|
|||||||
item != ompi_list_get_end(&mca_mpool_base_modules);
|
item != ompi_list_get_end(&mca_mpool_base_modules);
|
||||||
item = ompi_list_get_next(item))
|
item = ompi_list_get_next(item))
|
||||||
{
|
{
|
||||||
current = ((mca_mpool_base_selected_module_t *)item)->mpool_module;
|
current = ((mca_mpool_base_selected_module_t *)item);
|
||||||
if(0 == strcmp(key,
|
if(0 == strcmp(key,
|
||||||
current->mpool_component->mpool_version.mca_component_name))
|
current->mpool_module->mpool_component->mpool_version.mca_component_name))
|
||||||
{
|
{
|
||||||
match_found = true;
|
match_found = true;
|
||||||
if(NULL == current->mpool_register)
|
if(NULL == current->mpool_module->mpool_register)
|
||||||
{
|
{
|
||||||
if(NULL != no_reg_function)
|
if(NULL != no_reg_function)
|
||||||
{
|
{
|
||||||
@ -227,29 +231,32 @@ void * mca_mpool_base_alloc(size_t size, ompi_info_t * info)
|
|||||||
num_modules = 0;
|
num_modules = 0;
|
||||||
if(NULL != no_reg_function)
|
if(NULL != no_reg_function)
|
||||||
{
|
{
|
||||||
mem = no_reg_function->mpool_alloc(no_reg_function, size, 0, &user);
|
mca_mpool_base_module_t* mpool = no_reg_function->mpool_module;
|
||||||
|
mem = mpool->mpool_alloc(mpool, size, 0, ®istration);
|
||||||
((mca_mpool_base_chunk_t *) item)->key.bottom = mem;
|
((mca_mpool_base_chunk_t *) item)->key.bottom = mem;
|
||||||
((mca_mpool_base_chunk_t *) item)->key.top = (void *)
|
((mca_mpool_base_chunk_t *) item)->key.top = (void *)((char *) mem + size - 1);
|
||||||
((char *) mem + size - 1);
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].mpool = mpool;
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].mpool =
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].bmi_module = no_reg_function->mpool_bmi;
|
||||||
no_reg_function;
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules++].bmi_registration = registration;
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[num_modules++].user = user;
|
|
||||||
num_modules++;
|
num_modules++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mem = has_reg_function[i]->mpool_alloc(has_reg_function[i], size, 0, &user);
|
mca_mpool_base_module_t* mpool = has_reg_function[i]->mpool_module;
|
||||||
|
mem = mpool->mpool_alloc(mpool, size, 0, ®istration);
|
||||||
((mca_mpool_base_chunk_t *) item)->key.bottom = mem;
|
((mca_mpool_base_chunk_t *) item)->key.bottom = mem;
|
||||||
((mca_mpool_base_chunk_t *) item)->key.top = (void *) ((char *) mem + size - 1);
|
((mca_mpool_base_chunk_t *) item)->key.top = (void *) ((char *) mem + size - 1);
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].mpool = has_reg_function[i++];
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].mpool = mpool;
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[num_modules++].user = user;
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].bmi_module = has_reg_function[i]->mpool_bmi;
|
||||||
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules++].bmi_registration = registration;
|
||||||
|
i++;
|
||||||
num_modules++;
|
num_modules++;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(i < reg_module_num && MCA_MPOOL_BASE_MAX_REG > num_modules)
|
while(i < reg_module_num && MCA_MPOOL_BASE_MAX_REG > num_modules)
|
||||||
{
|
{
|
||||||
if(OMPI_SUCCESS != has_reg_function[i]->mpool_register(has_reg_function[i],
|
mca_mpool_base_module_t* mpool = has_reg_function[i]->mpool_module;
|
||||||
mem, size, &user))
|
if(OMPI_SUCCESS != mpool->mpool_register(mpool, mem, size, ®istration))
|
||||||
{
|
{
|
||||||
if(info == &ompi_mpi_info_null)
|
if(info == &ompi_mpi_info_null)
|
||||||
{
|
{
|
||||||
@ -261,8 +268,11 @@ void * mca_mpool_base_alloc(size_t size, ompi_info_t * info)
|
|||||||
free(has_reg_function);
|
free(has_reg_function);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].mpool = has_reg_function[i++];
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].mpool = mpool;
|
||||||
((mca_mpool_base_chunk_t *) item)->mpools[num_modules++].user = user;
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].bmi_module = has_reg_function[i]->mpool_bmi;
|
||||||
|
((mca_mpool_base_chunk_t *) item)->mpools[num_modules].bmi_registration = registration;
|
||||||
|
num_modules++;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(MCA_MPOOL_BASE_MAX_REG > num_modules)
|
if(MCA_MPOOL_BASE_MAX_REG > num_modules)
|
||||||
|
@ -50,62 +50,3 @@ int mca_mpool_base_init(bool enable_progress_threads, bool enable_mpi_threads)
|
|||||||
return ompi_rb_tree_init(&mca_mpool_base_tree, mca_mpool_base_tree_node_compare);
|
return ompi_rb_tree_init(&mca_mpool_base_tree, mca_mpool_base_tree_node_compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
mca_mpool_base_module_t* mca_mpool_base_module_init(const char* name)
|
|
||||||
{
|
|
||||||
ompi_list_item_t *item;
|
|
||||||
mca_base_component_list_item_t *cli;
|
|
||||||
mca_mpool_base_component_t *component;
|
|
||||||
mca_mpool_base_module_t *module;
|
|
||||||
mca_mpool_base_selected_module_t *sm;
|
|
||||||
|
|
||||||
/* Traverse the list of available modules; call their init
|
|
||||||
functions. */
|
|
||||||
|
|
||||||
for (item = ompi_list_get_first(&mca_mpool_base_components);
|
|
||||||
ompi_list_get_end(&mca_mpool_base_components) != item;
|
|
||||||
item = ompi_list_get_next(item)) {
|
|
||||||
cli = (mca_base_component_list_item_t *) item;
|
|
||||||
component = (mca_mpool_base_component_t *) cli->cli_component;
|
|
||||||
if(strcmp(component->mpool_version.mca_component_name,name) != 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ompi_output_verbose(10, mca_mpool_base_output,
|
|
||||||
"select: initializing %s module %s",
|
|
||||||
component->mpool_version.mca_type_name,
|
|
||||||
component->mpool_version.mca_component_name);
|
|
||||||
if (NULL == component->mpool_init) {
|
|
||||||
ompi_output_verbose(10, mca_mpool_base_output,
|
|
||||||
"select: no init function; ignoring module");
|
|
||||||
} else {
|
|
||||||
module = component->mpool_init(NULL);
|
|
||||||
|
|
||||||
/* If the module didn't initialize, unload it */
|
|
||||||
|
|
||||||
if (NULL == module) {
|
|
||||||
ompi_output_verbose(10, mca_mpool_base_output,
|
|
||||||
"select: init returned failure");
|
|
||||||
|
|
||||||
mca_base_component_repository_release((mca_base_component_t *) component);
|
|
||||||
ompi_output_verbose(10, mca_mpool_base_output,
|
|
||||||
"select: component %s unloaded",
|
|
||||||
component->mpool_version.mca_component_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Otherwise, it initialized properly. Save it. */
|
|
||||||
|
|
||||||
else {
|
|
||||||
ompi_output_verbose(10, mca_mpool_base_output,
|
|
||||||
"select: init returned success");
|
|
||||||
|
|
||||||
sm = OBJ_NEW(mca_mpool_base_selected_module_t);
|
|
||||||
sm->mpool_component = component;
|
|
||||||
sm->mpool_module = module;
|
|
||||||
ompi_list_append(&mca_mpool_base_modules, (ompi_list_item_t*) sm);
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,25 +44,10 @@ mca_mpool_base_component_t* mca_mpool_base_component_lookup(const char* name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
mca_mpool_base_module_t* mca_mpool_base_module_lookup(const char* name)
|
mca_mpool_base_module_t* mca_mpool_base_module_create(
|
||||||
{
|
const char* name,
|
||||||
/* does the module already exist? */
|
struct mca_bmi_base_module_t* bmi,
|
||||||
ompi_list_item_t *item;
|
struct mca_bmi_base_resources_t* resources)
|
||||||
for(item = ompi_list_get_first(&mca_mpool_base_modules);
|
|
||||||
item != ompi_list_get_end(&mca_mpool_base_modules);
|
|
||||||
item = ompi_list_get_next(item)) {
|
|
||||||
mca_mpool_base_selected_module_t *sm = (mca_mpool_base_selected_module_t *) item;
|
|
||||||
if(strcmp(sm->mpool_component->mpool_version.mca_component_name,
|
|
||||||
name) == 0) {
|
|
||||||
return sm->mpool_module;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* if not create it */
|
|
||||||
return mca_mpool_base_module_init(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mca_mpool_base_module_t* mca_mpool_base_module_create(const char* name, void* user)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
mca_mpool_base_component_t* component = NULL;
|
mca_mpool_base_component_t* component = NULL;
|
||||||
@ -84,7 +69,7 @@ mca_mpool_base_module_t* mca_mpool_base_module_create(const char* name, void* us
|
|||||||
|
|
||||||
if(NULL == component)
|
if(NULL == component)
|
||||||
return NULL;
|
return NULL;
|
||||||
module = component->mpool_init(user);
|
module = component->mpool_init(bmi,resources);
|
||||||
sm = OBJ_NEW(mca_mpool_base_selected_module_t);
|
sm = OBJ_NEW(mca_mpool_base_selected_module_t);
|
||||||
sm->mpool_component = component;
|
sm->mpool_component = component;
|
||||||
sm->mpool_module = module;
|
sm->mpool_module = module;
|
||||||
|
@ -22,49 +22,64 @@
|
|||||||
#include "mca/mca.h"
|
#include "mca/mca.h"
|
||||||
#include "info/info.h"
|
#include "info/info.h"
|
||||||
struct mca_mpool_t;
|
struct mca_mpool_t;
|
||||||
|
struct mca_bmi_base_module_t;
|
||||||
|
struct mca_bmi_base_resources_t;
|
||||||
|
struct mca_bmi_base_registration_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* component initialize
|
* component initialize
|
||||||
*/
|
*/
|
||||||
typedef struct mca_mpool_base_module_t* (*mca_mpool_base_component_init_fn_t)
|
typedef struct mca_mpool_base_module_t* (*mca_mpool_base_component_init_fn_t)(
|
||||||
(void* user_in);
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_resources_t*);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* allocate function typedef
|
||||||
|
*/
|
||||||
|
typedef void* (*mca_mpool_base_module_alloc_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realloc function typedef
|
||||||
|
*/
|
||||||
|
typedef void* (*mca_mpool_base_module_realloc_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
void* addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* free function typedef
|
||||||
|
*/
|
||||||
|
typedef void (*mca_mpool_base_module_free_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
void *);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* register memory
|
||||||
|
*/
|
||||||
|
typedef int (*mca_mpool_base_module_register_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
void * addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* deregister memory
|
||||||
|
*/
|
||||||
|
typedef int (*mca_mpool_base_module_deregister_fn_t)(
|
||||||
|
struct mca_mpool_base_module_t* mpool,
|
||||||
|
void * addr,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* if appropriate - returns base address of memory pool
|
* if appropriate - returns base address of memory pool
|
||||||
*/
|
*/
|
||||||
typedef void* (*mca_mpool_base_module_address_fn_t)(struct mca_mpool_base_module_t* mpool);
|
typedef void* (*mca_mpool_base_module_address_fn_t)(struct mca_mpool_base_module_t* mpool);
|
||||||
|
|
||||||
/**
|
|
||||||
* allocate function typedef
|
|
||||||
*/
|
|
||||||
typedef void* (*mca_mpool_base_module_alloc_fn_t)(struct mca_mpool_base_module_t* mpool, size_t size, size_t align, void** user_out);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* allocate function typedef
|
|
||||||
*/
|
|
||||||
typedef void* (*mca_mpool_base_module_alloc_and_register_fn_t)(struct mca_mpool_base_module_t* mpool,size_t size, size_t align, void** user_out);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* realloc function typedef
|
|
||||||
*/
|
|
||||||
typedef void* (*mca_mpool_base_module_realloc_fn_t)(struct mca_mpool_base_module_t* mpool, void* addr, size_t size, void** user_out);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* free function typedef
|
|
||||||
*/
|
|
||||||
typedef void (*mca_mpool_base_module_free_fn_t)(struct mca_mpool_base_module_t* mpool, void *);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* register memory
|
|
||||||
*/
|
|
||||||
typedef int (*mca_mpool_base_module_register_fn_t)(struct mca_mpool_base_module_t* mpool, void * addr, size_t size, void** user_out);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* deregister memory
|
|
||||||
*/
|
|
||||||
typedef int (*mca_mpool_base_module_deregister_fn_t)(struct mca_mpool_base_module_t* mpool, void * addr, size_t size);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* finalize
|
* finalize
|
||||||
*/
|
*/
|
||||||
@ -166,10 +181,12 @@ OMPI_DECLSPEC int mca_mpool_base_tree_node_compare(void * key1, void * key2);
|
|||||||
OMPI_DECLSPEC struct mca_mpool_base_chunk_t * mca_mpool_base_find(void * base);
|
OMPI_DECLSPEC struct mca_mpool_base_chunk_t * mca_mpool_base_find(void * base);
|
||||||
|
|
||||||
|
|
||||||
OMPI_DECLSPEC int mca_mpool_base_insert(void * addr,
|
OMPI_DECLSPEC int mca_mpool_base_insert(
|
||||||
size_t size,
|
void * addr,
|
||||||
mca_mpool_base_module_t* mpool,
|
size_t size,
|
||||||
void* user_data);
|
mca_mpool_base_module_t* mpool,
|
||||||
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_registration_t* registration);
|
||||||
|
|
||||||
OMPI_DECLSPEC int mca_mpool_base_remove(void * base);
|
OMPI_DECLSPEC int mca_mpool_base_remove(void * base);
|
||||||
|
|
||||||
|
@ -62,17 +62,27 @@ void* mca_mpool_sm_base(mca_mpool_base_module_t*);
|
|||||||
/**
|
/**
|
||||||
* Allocate block of shared memory.
|
* Allocate block of shared memory.
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_sm_alloc( mca_mpool_base_module_t* mpool, size_t size, size_t align, void** user_out);
|
void* mca_mpool_sm_alloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* realloc function typedef
|
* realloc function typedef
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_sm_realloc(mca_mpool_base_module_t* mpool, void* addr, size_t size, void** user_out);
|
void* mca_mpool_sm_realloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void* addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* free function typedef
|
* free function typedef
|
||||||
*/
|
*/
|
||||||
void mca_mpool_sm_free(mca_mpool_base_module_t* mpool, void *);
|
void mca_mpool_sm_free(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void *);
|
||||||
|
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
|
@ -28,7 +28,9 @@
|
|||||||
* Local functions
|
* Local functions
|
||||||
*/
|
*/
|
||||||
static int mca_mpool_sm_open(void);
|
static int mca_mpool_sm_open(void);
|
||||||
static mca_mpool_base_module_t* mca_mpool_sm_init(void* user);
|
static mca_mpool_base_module_t* mca_mpool_sm_init(
|
||||||
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_resources_t* resources);
|
||||||
|
|
||||||
mca_mpool_sm_component_t mca_mpool_sm_component = {
|
mca_mpool_sm_component_t mca_mpool_sm_component = {
|
||||||
{
|
{
|
||||||
@ -95,7 +97,9 @@ static int mca_mpool_sm_open(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static mca_mpool_base_module_t* mca_mpool_sm_init(void * user_in)
|
static mca_mpool_base_module_t* mca_mpool_sm_init(
|
||||||
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_resources_t* resources)
|
||||||
{
|
{
|
||||||
char *file_name;
|
char *file_name;
|
||||||
int len;
|
int len;
|
||||||
@ -149,7 +153,7 @@ static mca_mpool_base_module_t* mca_mpool_sm_init(void * user_in)
|
|||||||
/* setup allocator TODO fix up */
|
/* setup allocator TODO fix up */
|
||||||
mpool_module->sm_allocator =
|
mpool_module->sm_allocator =
|
||||||
allocator_component->allocator_init(true,
|
allocator_component->allocator_init(true,
|
||||||
mca_common_sm_mmap_alloc, NULL, NULL);
|
mca_common_sm_mmap_seg_alloc, NULL, NULL);
|
||||||
if(NULL == mpool_module->sm_allocator) {
|
if(NULL == mpool_module->sm_allocator) {
|
||||||
ompi_output(0, "mca_mpool_sm_init: unable to initialize allocator");
|
ompi_output(0, "mca_mpool_sm_init: unable to initialize allocator");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -36,16 +36,6 @@ void mca_mpool_sm_module_init(mca_mpool_sm_module_t* mpool)
|
|||||||
mpool->super.mpool_finalize = NULL;
|
mpool->super.mpool_finalize = NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
/* mca_mpool_base_module_t mca_mpool_sm_module = { */
|
|
||||||
/* &mca_mpool_sm_component.super, */
|
|
||||||
/* mca_mpool_sm_base, */
|
|
||||||
/* mca_mpool_sm_alloc, */
|
|
||||||
/* mca_mpool_sm_realloc, */
|
|
||||||
/* mca_mpool_sm_free, */
|
|
||||||
/* NULL, */
|
|
||||||
/* NULL */
|
|
||||||
/* }; */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* base address of shared memory mapping
|
* base address of shared memory mapping
|
||||||
@ -58,19 +48,27 @@ void* mca_mpool_sm_base(mca_mpool_base_module_t* mpool)
|
|||||||
/**
|
/**
|
||||||
* allocate function
|
* allocate function
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_sm_alloc(mca_mpool_base_module_t* mpool, size_t size, size_t align, void** user_out)
|
void* mca_mpool_sm_alloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_mpool_sm_module_t* mpool_sm = (mca_mpool_sm_module_t*)mpool;
|
mca_mpool_sm_module_t* mpool_sm = (mca_mpool_sm_module_t*)mpool;
|
||||||
return mpool_sm->sm_allocator->alc_alloc(mpool_sm->sm_allocator, size, align, user_out);
|
return mpool_sm->sm_allocator->alc_alloc(mpool_sm->sm_allocator, size, align, registration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* realloc function
|
* realloc function
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_sm_realloc(mca_mpool_base_module_t* mpool, void* addr, size_t size, void** user_out)
|
void* mca_mpool_sm_realloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void* addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_mpool_sm_module_t* mpool_sm = (mca_mpool_sm_module_t*)mpool;
|
mca_mpool_sm_module_t* mpool_sm = (mca_mpool_sm_module_t*)mpool;
|
||||||
return mpool_sm->sm_allocator->alc_realloc(mpool_sm->sm_allocator, addr, size, user_out);
|
return mpool_sm->sm_allocator->alc_realloc(mpool_sm->sm_allocator, addr, size, registration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,6 +76,6 @@ void* mca_mpool_sm_realloc(mca_mpool_base_module_t* mpool, void* addr, size_t si
|
|||||||
*/
|
*/
|
||||||
void mca_mpool_sm_free(mca_mpool_base_module_t* mpool, void * addr)
|
void mca_mpool_sm_free(mca_mpool_base_module_t* mpool, void * addr)
|
||||||
{
|
{
|
||||||
mca_mpool_sm_module_t* mpool_sm = (mca_mpool_sm_module_t*)mpool;
|
mca_mpool_sm_module_t* mpool_sm = (mca_mpool_sm_module_t*)mpool;
|
||||||
mpool_sm->sm_allocator->alc_free(mpool_sm->sm_allocator, addr);
|
mpool_sm->sm_allocator->alc_free(mpool_sm->sm_allocator, addr);
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
|
ompi
|
||||||
gshipman
|
gshipman
|
||||||
twoodall
|
twoodall
|
||||||
|
@ -32,11 +32,12 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
static inline void * DOWN_ALIGN_ADDR(void * addr, uint32_t cnt) {
|
static inline void * DOWN_ALIGN_ADDR(void * addr, uint32_t cnt) {
|
||||||
return (MT_virt_addr_t)(addr) & (~((MT_virt_addr_t)0) << (cnt));
|
return (void*)((MT_virt_addr_t)(addr) & (~((MT_virt_addr_t)0) << (cnt)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void* ALIGN_ADDR(void* addr, uint32_t cnt ) {
|
static inline void* ALIGN_ADDR(void* addr, uint32_t cnt ) {
|
||||||
DOWN_ALIGN_ADDR(((addr) + ~(~((MT_virt_addr_t)0) << (cnt))), (cnt));
|
DOWN_ALIGN_ADDR(((addr) + ~(~((MT_virt_addr_t)0) << (cnt))), (cnt));
|
||||||
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -54,8 +55,8 @@ OMPI_COMP_EXPORT extern mca_mpool_vapi_component_t mca_mpool_vapi_component;
|
|||||||
struct mca_mpool_vapi_module_t {
|
struct mca_mpool_vapi_module_t {
|
||||||
mca_mpool_base_module_t super;
|
mca_mpool_base_module_t super;
|
||||||
mca_allocator_base_module_t * vapi_allocator;
|
mca_allocator_base_module_t * vapi_allocator;
|
||||||
mca_common_vapi_hca_pd_t hca_pd;
|
mca_bmi_base_resources_t hca_pd;
|
||||||
mca_common_vapi_memhandle_t mem_hndl;
|
mca_bmi_base_registration_t mem_hndl;
|
||||||
}; typedef struct mca_mpool_vapi_module_t mca_mpool_vapi_module_t;
|
}; typedef struct mca_mpool_vapi_module_t mca_mpool_vapi_module_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -72,17 +73,34 @@ void* mca_mpool_vapi_base(mca_mpool_base_module_t*);
|
|||||||
/**
|
/**
|
||||||
* Allocate block of shared memory.
|
* Allocate block of shared memory.
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_vapi_alloc( mca_mpool_base_module_t* mpool, size_t size, size_t align, void** user_out);
|
void* mca_mpool_vapi_alloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* realloc function typedef
|
* realloc function typedef
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_vapi_realloc(mca_mpool_base_module_t* mpool, void* addr, size_t size, void** user_out);
|
void* mca_mpool_vapi_realloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void* addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* register function typedef
|
* register function typedef
|
||||||
*/
|
*/
|
||||||
int mca_mpool_vapi_register(mca_mpool_base_module_t* mpool, void *addr, size_t size, void** user_out);
|
int mca_mpool_vapi_register(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void *addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
|
int mca_mpool_vapi_deregister(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void *addr,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,7 +108,10 @@ void* mca_mpool_vapi_realloc(mca_mpool_base_module_t* mpool, void* addr, size_t
|
|||||||
*/
|
*/
|
||||||
void mca_mpool_vapi_free(mca_mpool_base_module_t* mpool, void *);
|
void mca_mpool_vapi_free(mca_mpool_base_module_t* mpool, void *);
|
||||||
|
|
||||||
void* mca_common_vapi_segment_alloc(size_t* size, void* user_in, void** user_out);
|
void* mca_common_vapi_segment_alloc(
|
||||||
|
struct mca_mpool_base_module_t* module,
|
||||||
|
size_t* size,
|
||||||
|
struct mca_bmi_base_registration_t** registration);
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,9 @@
|
|||||||
* Local functions
|
* Local functions
|
||||||
*/
|
*/
|
||||||
static int mca_mpool_vapi_open(void);
|
static int mca_mpool_vapi_open(void);
|
||||||
static mca_mpool_base_module_t* mca_mpool_vapi_init(void* user);
|
static mca_mpool_base_module_t* mca_mpool_vapi_init(
|
||||||
|
struct mca_bmi_base_module_t* module,
|
||||||
|
struct mca_bmi_base_resources_t* resources);
|
||||||
|
|
||||||
mca_mpool_vapi_component_t mca_mpool_vapi_component = {
|
mca_mpool_vapi_component_t mca_mpool_vapi_component = {
|
||||||
{
|
{
|
||||||
@ -70,16 +72,6 @@ static char* mca_mpool_vapi_param_register_string(
|
|||||||
return param_value;
|
return param_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mca_mpool_vapi_param_register_int(
|
|
||||||
const char* param_name,
|
|
||||||
int default_value)
|
|
||||||
{
|
|
||||||
int id = mca_base_param_register_int("mpool","vapi",param_name,NULL,default_value);
|
|
||||||
int param_value = default_value;
|
|
||||||
mca_base_param_lookup_int(id,¶m_value);
|
|
||||||
return param_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* component open/close/init function
|
* component open/close/init function
|
||||||
@ -97,38 +89,37 @@ static int mca_mpool_vapi_open(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Allocates a segment of memory and registers with IB, user_out returns the memory handle. */
|
/* Allocates a segment of memory and registers with IB, user_out returns the memory handle. */
|
||||||
void* mca_common_vapi_segment_alloc(size_t* size, void* user_in, void** user_out){
|
void* mca_common_vapi_segment_alloc(
|
||||||
int rc;
|
struct mca_mpool_base_module_t* mpool,
|
||||||
mca_mpool_base_module_t* mpool = (mca_mpool_base_module_t*) user_in;
|
size_t* size,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
void* addr = (void*)malloc((*size) + mca_mpool_vapi_component.page_size);
|
{
|
||||||
addr = (void*) ALIGN_ADDR(addr, mca_mpool_vapi_component.page_size_log);
|
void* addr_malloc = (void*)malloc((*size) + mca_mpool_vapi_component.page_size);
|
||||||
if(OMPI_SUCCESS != mpool->mpool_register(mpool, addr, *size, user_out)) {
|
void* addr = (void*) ALIGN_ADDR(addr_malloc, mca_mpool_vapi_component.page_size_log);
|
||||||
|
if(OMPI_SUCCESS != mpool->mpool_register(mpool, addr, *size, registration)) {
|
||||||
|
free(addr_malloc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Allocates a segment of memory and registers with IB, user_out returns the memory handle. */
|
/* Allocates a segment of memory and registers with IB, user_out returns the memory handle. */
|
||||||
|
static mca_mpool_base_module_t* mca_mpool_vapi_init(
|
||||||
static mca_mpool_base_module_t* mca_mpool_vapi_init(void * user_in)
|
struct mca_bmi_base_module_t* bmi,
|
||||||
|
struct mca_bmi_base_resources_t* resources)
|
||||||
{
|
{
|
||||||
|
mca_mpool_vapi_module_t* mpool_module;
|
||||||
|
mca_allocator_base_component_t* allocator_component;
|
||||||
|
long page_size = mca_mpool_vapi_component.page_size;
|
||||||
long page_size;
|
|
||||||
page_size = mca_mpool_vapi_component.page_size;
|
|
||||||
mca_mpool_vapi_component.page_size_log = 0;
|
mca_mpool_vapi_component.page_size_log = 0;
|
||||||
while(page_size > 1){
|
while(page_size > 1){
|
||||||
page_size = page_size >> 1;
|
page_size = page_size >> 1;
|
||||||
mca_mpool_vapi_component.page_size_log++;
|
mca_mpool_vapi_component.page_size_log++;
|
||||||
}
|
}
|
||||||
mca_allocator_base_component_t* allocator_component = mca_allocator_component_lookup(
|
|
||||||
mca_mpool_vapi_component.vapi_allocator_name);
|
|
||||||
|
|
||||||
|
/* if specified allocator cannout be loaded - look for an alternative */
|
||||||
/* if specified allocator cannout be loaded - look for an alternative */
|
allocator_component = mca_allocator_component_lookup(mca_mpool_vapi_component.vapi_allocator_name);
|
||||||
if(NULL == allocator_component) {
|
if(NULL == allocator_component) {
|
||||||
if(ompi_list_get_size(&mca_allocator_base_components) == 0) {
|
if(ompi_list_get_size(&mca_allocator_base_components) == 0) {
|
||||||
mca_base_component_list_item_t* item = (mca_base_component_list_item_t*)
|
mca_base_component_list_item_t* item = (mca_base_component_list_item_t*)
|
||||||
@ -143,34 +134,18 @@ static mca_mpool_base_module_t* mca_mpool_vapi_init(void * user_in)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mca_mpool_vapi_module_t* mpool_module;
|
|
||||||
mpool_module = (mca_mpool_vapi_module_t*)malloc(sizeof(mca_mpool_vapi_module_t));
|
mpool_module = (mca_mpool_vapi_module_t*)malloc(sizeof(mca_mpool_vapi_module_t));
|
||||||
mca_mpool_vapi_module_init(mpool_module);
|
mca_mpool_vapi_module_init(mpool_module);
|
||||||
|
|
||||||
/* setup allocator TODO fix up */
|
/* setup allocator TODO fix up */
|
||||||
mpool_module->hca_pd = *(mca_common_vapi_hca_pd_t*) user_in;
|
mpool_module->hca_pd = *resources;
|
||||||
mpool_module->vapi_allocator =
|
mpool_module->vapi_allocator =
|
||||||
allocator_component->allocator_init(true,
|
allocator_component->allocator_init(true, mca_common_vapi_segment_alloc, NULL, &mpool_module->super);
|
||||||
mca_common_vapi_segment_alloc, NULL, mpool_module);
|
|
||||||
if(NULL == mpool_module->vapi_allocator) {
|
if(NULL == mpool_module->vapi_allocator) {
|
||||||
ompi_output(0, "mca_mpool_vapi_init: unable to initialize allocator");
|
ompi_output(0, "mca_mpool_vapi_init: unable to initialize allocator");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return &mpool_module->super;
|
return &mpool_module->super;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ void mca_mpool_vapi_module_init(mca_mpool_vapi_module_t* mpool)
|
|||||||
mpool->super.mpool_realloc = mca_mpool_vapi_realloc;
|
mpool->super.mpool_realloc = mca_mpool_vapi_realloc;
|
||||||
mpool->super.mpool_free = mca_mpool_vapi_free;
|
mpool->super.mpool_free = mca_mpool_vapi_free;
|
||||||
mpool->super.mpool_register = mca_mpool_vapi_register;
|
mpool->super.mpool_register = mca_mpool_vapi_register;
|
||||||
mpool->super.mpool_deregister = NULL;
|
mpool->super.mpool_deregister = mca_mpool_vapi_deregister;
|
||||||
mpool->super.mpool_finalize = NULL;
|
mpool->super.mpool_finalize = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,32 +40,35 @@ void mca_mpool_vapi_module_init(mca_mpool_vapi_module_t* mpool)
|
|||||||
/**
|
/**
|
||||||
* allocate function
|
* allocate function
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_vapi_alloc(mca_mpool_base_module_t* mpool, size_t size, size_t align, void** user_out)
|
void* mca_mpool_vapi_alloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
size_t size,
|
||||||
|
size_t align,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_mpool_vapi_module_t* mpool_vapi = (mca_mpool_vapi_module_t*)mpool;
|
mca_mpool_vapi_module_t* mpool_vapi = (mca_mpool_vapi_module_t*)mpool;
|
||||||
return mpool_vapi->vapi_allocator->alc_alloc(mpool_vapi->vapi_allocator, size, align, user_out);
|
return mpool_vapi->vapi_allocator->alc_alloc(mpool_vapi->vapi_allocator, size, align, registration);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* register memory
|
* register memory
|
||||||
*/
|
*/
|
||||||
int mca_mpool_vapi_register(mca_mpool_base_module_t* mpool, void *addr, size_t size, void** user_out){
|
int mca_mpool_vapi_register(mca_mpool_base_module_t* mpool, void *addr, size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration){
|
||||||
|
|
||||||
mca_mpool_vapi_module_t * mpool_module = (mca_mpool_vapi_module_t*) mpool;
|
mca_mpool_vapi_module_t * mpool_module = (mca_mpool_vapi_module_t*) mpool;
|
||||||
VAPI_mrw_t mr_in, mr_out;
|
VAPI_mrw_t mr_in, mr_out;
|
||||||
|
|
||||||
VAPI_ret_t ret;
|
VAPI_ret_t ret;
|
||||||
mca_common_vapi_memhandle_t* mem_hndl;
|
mca_bmi_base_registration_t* mem_hndl;
|
||||||
memset(&mr_in, 0, sizeof(VAPI_mrw_t));
|
memset(&mr_in, 0, sizeof(VAPI_mrw_t));
|
||||||
memset(&mr_out, 0, sizeof(VAPI_mrw_t));
|
memset(&mr_out, 0, sizeof(VAPI_mrw_t));
|
||||||
|
|
||||||
|
|
||||||
*user_out = (void*) malloc(sizeof(mca_common_vapi_memhandle_t));
|
*registration = (void*) malloc(sizeof(mca_bmi_base_registration_t));
|
||||||
|
mem_hndl = (mca_bmi_base_registration_t*) *registration;
|
||||||
mem_hndl = (mca_common_vapi_memhandle_t*) *user_out;
|
memset(mem_hndl, 0, sizeof(mca_bmi_base_registration_t*));
|
||||||
memset(mem_hndl, 0, sizeof(mca_common_vapi_memhandle_t*));
|
|
||||||
mem_hndl->hndl = VAPI_INVAL_HNDL;
|
mem_hndl->hndl = VAPI_INVAL_HNDL;
|
||||||
|
|
||||||
|
|
||||||
@ -119,10 +122,14 @@ int mca_mpool_vapi_deregister(mca_mpool_base_module_t* mpool, void *addr, size_t
|
|||||||
/**
|
/**
|
||||||
* realloc function
|
* realloc function
|
||||||
*/
|
*/
|
||||||
void* mca_mpool_vapi_realloc(mca_mpool_base_module_t* mpool, void* addr, size_t size, void** user_out)
|
void* mca_mpool_vapi_realloc(
|
||||||
|
mca_mpool_base_module_t* mpool,
|
||||||
|
void* addr,
|
||||||
|
size_t size,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
mca_mpool_vapi_module_t* mpool_vapi = (mca_mpool_vapi_module_t*)mpool;
|
mca_mpool_vapi_module_t* mpool_vapi = (mca_mpool_vapi_module_t*)mpool;
|
||||||
return mpool_vapi->vapi_allocator->alc_realloc(mpool_vapi->vapi_allocator, addr, size, user_out);
|
return mpool_vapi->vapi_allocator->alc_realloc( mpool_vapi->vapi_allocator, addr, size, registration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +42,10 @@ static int32_t mca_pml_bsend_init = 0;
|
|||||||
/*
|
/*
|
||||||
* Routine to return pages to sub-allocator as needed
|
* Routine to return pages to sub-allocator as needed
|
||||||
*/
|
*/
|
||||||
static void* mca_pml_bsend_alloc_segment(size_t* size_inout, void* user_in, void** user_out)
|
static void* mca_pml_bsend_alloc_segment(
|
||||||
|
struct mca_mpool_base_module_t* module,
|
||||||
|
size_t* size_inout,
|
||||||
|
struct mca_bmi_base_registration_t** registration)
|
||||||
{
|
{
|
||||||
void *addr;
|
void *addr;
|
||||||
size_t size = *size_inout;
|
size_t size = *size_inout;
|
||||||
@ -54,6 +57,7 @@ static void* mca_pml_bsend_alloc_segment(size_t* size_inout, void* user_in, void
|
|||||||
addr = mca_pml_bsend_addr;
|
addr = mca_pml_bsend_addr;
|
||||||
mca_pml_bsend_addr += size;
|
mca_pml_bsend_addr += size;
|
||||||
*size_inout = size;
|
*size_inout = size;
|
||||||
|
*registration = NULL;
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
ompi
|
||||||
twoodall
|
twoodall
|
||||||
gshipman
|
gshipman
|
||||||
bosilca
|
bosilca
|
||||||
|
@ -346,6 +346,7 @@ void mca_pml_ob1_recv_request_schedule(mca_pml_ob1_recv_request_t* recvreq)
|
|||||||
dst = ep->bmi_prepare_dst(
|
dst = ep->bmi_prepare_dst(
|
||||||
ep->bmi,
|
ep->bmi,
|
||||||
ep->bmi_endpoint,
|
ep->bmi_endpoint,
|
||||||
|
NULL,
|
||||||
&recvreq->req_recv.req_convertor,
|
&recvreq->req_recv.req_convertor,
|
||||||
0,
|
0,
|
||||||
&size);
|
&size);
|
||||||
|
@ -403,6 +403,7 @@ int mca_pml_ob1_send_request_schedule(mca_pml_ob1_send_request_t* sendreq)
|
|||||||
des = ep->bmi_prepare_src(
|
des = ep->bmi_prepare_src(
|
||||||
ep->bmi,
|
ep->bmi,
|
||||||
ep->bmi_endpoint,
|
ep->bmi_endpoint,
|
||||||
|
NULL,
|
||||||
&sendreq->req_send.req_convertor,
|
&sendreq->req_send.req_convertor,
|
||||||
sizeof(mca_pml_ob1_frag_hdr_t),
|
sizeof(mca_pml_ob1_frag_hdr_t),
|
||||||
&size);
|
&size);
|
||||||
@ -613,6 +614,7 @@ void mca_pml_ob1_send_request_put(
|
|||||||
des = bmi->bmi_prepare_src(
|
des = bmi->bmi_prepare_src(
|
||||||
bmi,
|
bmi,
|
||||||
ep->bmi_endpoint,
|
ep->bmi_endpoint,
|
||||||
|
NULL,
|
||||||
&sendreq->req_send.req_convertor,
|
&sendreq->req_send.req_convertor,
|
||||||
0,
|
0,
|
||||||
&size);
|
&size);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user