diff --git a/ompi/communicator/comm_init.c b/ompi/communicator/comm_init.c index 914f58a7119..d3f24115ad7 100644 --- a/ompi/communicator/comm_init.c +++ b/ompi/communicator/comm_init.c @@ -219,6 +219,7 @@ ompi_communicator_t *ompi_comm_allocate ( int local_size, int remote_size ) /* create new communicator element */ new_comm = OBJ_NEW(ompi_communicator_t); + Tau_start_class_allocation(new_comm->c_base.obj_class->cls_name, 0, 0); new_comm->c_local_group = ompi_group_allocate ( local_size ); if ( 0 < remote_size ) { new_comm->c_remote_group = ompi_group_allocate (remote_size); @@ -234,6 +235,7 @@ ompi_communicator_t *ompi_comm_allocate ( int local_size, int remote_size ) /* fill in the inscribing hyper-cube dimensions */ new_comm->c_cube_dim = opal_cube_dim(local_size); + Tau_stop_class_allocation(new_comm->c_base.obj_class->cls_name, 0); return new_comm; } diff --git a/ompi/group/group_init.c b/ompi/group/group_init.c index 2155d262470..c0c50fb09b6 100644 --- a/ompi/group/group_init.c +++ b/ompi/group/group_init.c @@ -57,7 +57,11 @@ ompi_predefined_group_t *ompi_mpi_group_null_addr = &ompi_mpi_group_null; ompi_group_t *ompi_group_allocate(int group_size) { /* local variables */ + Tau_start_class_allocation("ompi_group_t", 0, 0); ompi_proc_t **procs = calloc (group_size, sizeof (ompi_proc_t *)); + Tau_start_class_allocation("ompi_proc_t **", group_size * sizeof(ompi_proc_t *), 0); + Tau_stop_class_allocation("ompi_proc_t **", 1); + Tau_stop_class_allocation("ompi_group_t", 0); ompi_group_t *new_group; if (NULL == procs) { @@ -81,6 +85,7 @@ ompi_group_t *ompi_group_allocate_plist_w_procs (ompi_proc_t **procs, int group_ /* create new group group element */ new_group = OBJ_NEW(ompi_group_t); + Tau_start_class_allocation(new_group->super.obj_class->cls_name, 0, 0); if (NULL == new_group) { return NULL; @@ -105,7 +110,7 @@ ompi_group_t *ompi_group_allocate_plist_w_procs (ompi_proc_t **procs, int group_ OMPI_GROUP_SET_DENSE(new_group); ompi_group_increment_proc_count (new_group); - + Tau_stop_class_allocation(new_group->super.obj_class->cls_name, 0); return new_group; } @@ -126,11 +131,14 @@ ompi_group_t *ompi_group_allocate_sporadic(int group_size) new_group = NULL; goto error_exit; } + Tau_start_class_allocation(new_group->super.obj_class->cls_name, 0, 0); /* allocate array of (grp_sporadic_list )'s */ if (0 < group_size) { new_group->sparse_data.grp_sporadic.grp_sporadic_list = (struct ompi_group_sporadic_list_t *)malloc (sizeof(struct ompi_group_sporadic_list_t ) * group_size); + Tau_start_class_allocation("ompi_group_sporadic_list_t *", sizeof(struct ompi_group_sporadic_list_t ) * group_size, 0); + Tau_stop_class_allocation("ompi_group_sporadic_list_t *", 1); /* non-empty group */ if ( NULL == new_group->sparse_data.grp_sporadic.grp_sporadic_list) { @@ -151,6 +159,7 @@ ompi_group_t *ompi_group_allocate_sporadic(int group_size) OMPI_GROUP_SET_SPORADIC(new_group); error_exit: + Tau_stop_class_allocation(new_group->super.obj_class->cls_name, 0); return new_group; } @@ -168,6 +177,7 @@ ompi_group_t *ompi_group_allocate_strided(void) new_group = NULL; goto error_exit; } + Tau_start_class_allocation(new_group->super.obj_class->cls_name, 0, 0); /* initialize our rank to MPI_UNDEFINED */ new_group->grp_my_rank = MPI_UNDEFINED; new_group->grp_proc_pointers = NULL; @@ -177,6 +187,7 @@ ompi_group_t *ompi_group_allocate_strided(void) new_group->sparse_data.grp_strided.grp_strided_last_element = -1; error_exit: /* return */ + Tau_stop_class_allocation(new_group->super.obj_class->cls_name, 0); return new_group; } ompi_group_t *ompi_group_allocate_bmap(int orig_group_size , int group_size) @@ -196,8 +207,11 @@ ompi_group_t *ompi_group_allocate_bmap(int orig_group_size , int group_size) goto error_exit; } /* allocate the unsigned char list */ + Tau_start_class_allocation(new_group->super.obj_class->cls_name, 0, 0); new_group->sparse_data.grp_bitmap.grp_bitmap_array = (unsigned char *)malloc (sizeof(unsigned char) * ompi_group_div_ceil(orig_group_size,BSIZE)); + Tau_start_class_allocation("unsigned char *", sizeof(struct ompi_group_sporadic_list_t ) * group_size, 0); + Tau_stop_class_allocation("unsigned char *", 1); new_group->sparse_data.grp_bitmap.grp_bitmap_array_len = ompi_group_div_ceil(orig_group_size,BSIZE); @@ -211,6 +225,7 @@ ompi_group_t *ompi_group_allocate_bmap(int orig_group_size , int group_size) error_exit: /* return */ + Tau_stop_class_allocation(new_group->super.obj_class->cls_name, 0); return new_group; } diff --git a/ompi/mca/pml/ob1/pml_ob1_comm.c b/ompi/mca/pml/ob1/pml_ob1_comm.c index 510704849da..824cbfe5138 100644 --- a/ompi/mca/pml/ob1/pml_ob1_comm.c +++ b/ompi/mca/pml/ob1/pml_ob1_comm.c @@ -91,7 +91,11 @@ OBJ_CLASS_INSTANCE( int mca_pml_ob1_comm_init_size (mca_pml_ob1_comm_t* comm, size_t size) { /* send message sequence-number support - sender side */ + Tau_start_class_allocation(comm->super.obj_class->cls_name, 0, 0); comm->procs = (mca_pml_ob1_comm_proc_t **) calloc(size, sizeof (mca_pml_ob1_comm_proc_t *)); + Tau_start_class_allocation("mca_pml_ob1_comm_proc_t", size * sizeof(mca_pml_ob1_comm_proc_t *), 0); + Tau_stop_class_allocation("mca_pml_ob1_comm_proc_t", 1); + Tau_stop_class_allocation(comm->super.obj_class->cls_name, 0); if(NULL == comm->procs) { return OMPI_ERR_OUT_OF_RESOURCE; } diff --git a/ompi/mca/pml/yalla/pml_yalla.c b/ompi/mca/pml/yalla/pml_yalla.c index 11026b39c20..617406c6464 100644 --- a/ompi/mca/pml/yalla/pml_yalla.c +++ b/ompi/mca/pml/yalla/pml_yalla.c @@ -256,7 +256,11 @@ int mca_pml_yalla_add_procs(struct ompi_proc_t **procs, size_t nprocs) return OMPI_ERROR; } + Tau_start_class_allocation(procs[i]->super.super.super.obj_class->cls_name, 0, 0); + Tau_start_class_allocation("mxm_conn_h", sizeof(mxm_conn_h), 0); procs[i]->proc_endpoints[OMPI_PROC_ENDPOINT_TAG_PML] = conn; + Tau_stop_class_allocation("mxm_conn_h", 1); + Tau_stop_class_allocation(procs[i]->super.super.super.obj_class->cls_name, 0); } return OMPI_SUCCESS; diff --git a/ompi/win/win.c b/ompi/win/win.c index 6ce756e6e87..1939b7043d0 100644 --- a/ompi/win/win.c +++ b/ompi/win/win.c @@ -144,6 +144,7 @@ static int alloc_window(struct ompi_communicator_t *comm, ompi_info_t *info, int /* create the object */ win = OBJ_NEW(ompi_win_t); + Tau_start_class_allocation(win->w_base.obj_class->cls_name, 0, 0); if (NULL == win) { return OMPI_ERR_OUT_OF_RESOURCE; } @@ -177,6 +178,7 @@ static int alloc_window(struct ompi_communicator_t *comm, ompi_info_t *info, int win->w_group = group; *win_out = win; + Tau_stop_class_allocation(win->w_base.obj_class->cls_name, 0); return OMPI_SUCCESS; } diff --git a/opal/class/opal_object.c b/opal/class/opal_object.c index d36ab208b6c..87b01391f7a 100644 --- a/opal/class/opal_object.c +++ b/opal/class/opal_object.c @@ -33,6 +33,30 @@ #include "opal/class/opal_object.h" #include "opal/constants.h" +void __attribute__((weak)) Tau_track_class_allocation(const char * name, size_t size) { + +} + +void __attribute__((weak)) Tau_track_class_deallocation(const char * name, size_t size) { + +} + +void __attribute__((weak)) Tau_start_class_allocation(const char * name, size_t size, int include_in_parent) { + +} + +void __attribute__((weak)) Tau_stop_class_allocation(const char * name, int record) { + +} + +void __attribute__((weak)) Tau_start_class_deallocation(const char * name, size_t size, int include_in_parent) { + +} + +void __attribute__((weak)) Tau_stop_class_deallocation(const char * name, int record) { + +} + /* * Instantiation of class descriptor for the base class. This is * special, since be mark it as already initialized, with no parent diff --git a/opal/class/opal_object.h b/opal/class/opal_object.h index 8539f2bf872..e8e6c2a047c 100644 --- a/opal/class/opal_object.h +++ b/opal/class/opal_object.h @@ -132,6 +132,13 @@ BEGIN_C_DECLS #define OPAL_OBJ_MAGIC_ID ((0xdeafbeedULL << 32) + 0xdeafbeedULL) #endif +void __attribute__((weak)) Tau_track_class_allocation(const char * name, size_t size); +void __attribute__((weak)) Tau_track_class_deallocation(const char * name, size_t size); +void __attribute__((weak)) Tau_start_class_allocation(const char * name, size_t size, int include_in_parent); +void __attribute__((weak)) Tau_stop_class_allocation(const char * name, int record); +void __attribute__((weak)) Tau_start_class_deallocation(const char * name, size_t size, int include_in_parent); +void __attribute__((weak)) Tau_stop_class_deallocation(const char * name, int record); + /* typedefs ***********************************************************/ typedef struct opal_object_t opal_object_t; @@ -457,6 +464,7 @@ static inline void opal_obj_run_destructors(opal_object_t * object) assert(NULL != object->obj_class); + Tau_track_class_deallocation(object->obj_class->cls_name, object->obj_class->cls_sizeof); cls_destruct = object->obj_class->cls_destruct_array; while( NULL != *cls_destruct ) { (*cls_destruct)(object); @@ -480,6 +488,8 @@ static inline opal_object_t *opal_obj_new(opal_class_t * cls) opal_object_t *object; assert(cls->cls_sizeof >= sizeof(opal_object_t)); + Tau_start_class_allocation(cls->cls_name, cls->cls_sizeof, 0); + #if OPAL_WANT_MEMCHECKER object = (opal_object_t *) calloc(1, cls->cls_sizeof); #else @@ -493,6 +503,7 @@ static inline opal_object_t *opal_obj_new(opal_class_t * cls) object->obj_reference_count = 1; opal_obj_run_constructors(object); } + Tau_stop_class_allocation(cls->cls_name, 1); return object; } diff --git a/oshmem/proc/proc.c b/oshmem/proc/proc.c index 665dd10caed..f6bf7a3b259 100644 --- a/oshmem/proc/proc.c +++ b/oshmem/proc/proc.c @@ -136,6 +136,7 @@ oshmem_group_t* oshmem_proc_group_create(int pe_start, assert(oshmem_proc_local()); group = OBJ_NEW(oshmem_group_t); + Tau_start_class_allocation(group->base.obj_class->cls_name, 0, 0); if (group) { cur_pe = 0; @@ -145,7 +146,10 @@ oshmem_group_t* oshmem_proc_group_create(int pe_start, /* allocate an array */ proc_array = (ompi_proc_t**) malloc(pe_size * sizeof(ompi_proc_t*)); + Tau_start_class_allocation("ompi_proc_t **", pe_size * sizeof(ompi_proc_t*), 0); + Tau_stop_class_allocation("ompi_proc_t **", 1); if (NULL == proc_array) { + Tau_stop_class_allocation(group->base.obj_class->cls_name, 0); OBJ_RELEASE(group); OPAL_THREAD_UNLOCK(&oshmem_proc_lock); return NULL ; @@ -197,6 +201,7 @@ oshmem_group_t* oshmem_proc_group_create(int pe_start, if (OSHMEM_SUCCESS != mca_scoll_base_select(group)) { opal_output(0, "Error: No collective modules are available: group is not created, returning NULL"); + Tau_stop_class_allocation(group->base.obj_class->cls_name, 0); oshmem_proc_group_destroy(group); OPAL_THREAD_UNLOCK(&oshmem_proc_lock); return NULL; @@ -204,6 +209,7 @@ oshmem_group_t* oshmem_proc_group_create(int pe_start, OPAL_THREAD_UNLOCK(&oshmem_proc_lock); } + Tau_stop_class_allocation(group->base.obj_class->cls_name, 0); return group; }