void TRACE_surf_gtnets_destroy(void *action);
/* from smpi_instr.c */
+void TRACE_internal_smpi_set_category (const char *category);
+const char *TRACE_internal_smpi_get_category (void);
void TRACE_smpi_alloc(void);
void TRACE_smpi_release(void);
void TRACE_smpi_init(int rank);
return key;
}
+static xbt_dict_t process_category;
+
+void TRACE_internal_smpi_set_category (const char *category)
+{
+ if (!TRACE_smpi_is_enabled()) return;
+
+ char processid[INSTR_DEFAULT_STR_SIZE];
+ snprintf (processid, INSTR_DEFAULT_STR_SIZE, "%p", SIMIX_process_self());
+ if (xbt_dict_get_or_null (process_category, processid))
+ xbt_dict_remove (process_category, processid);
+ if (category != NULL)
+ xbt_dict_set (process_category, processid, xbt_strdup(category), xbt_free);
+}
+
+const char *TRACE_internal_smpi_get_category (void)
+{
+ if (!TRACE_smpi_is_enabled()) return NULL;
+
+ char processid[INSTR_DEFAULT_STR_SIZE];
+ snprintf (processid, INSTR_DEFAULT_STR_SIZE, "%p", SIMIX_process_self());
+ return xbt_dict_get_or_null (process_category, processid);
+}
+
void TRACE_smpi_alloc()
{
keys = xbt_dict_new();
+ process_category = xbt_dict_new();
}
void TRACE_smpi_start(void)
{
//need to end bench otherwise categories for execution tasks are wrong
smpi_bench_end();
- int ret;
- if (!TRACE_is_enabled()){
- ret = 1;
- }else{
- if (category != NULL) {
- ret = TRACE_category(category);
- TRACE_category_set(SIMIX_process_self(), category);
- }else{
- //if category is NULL, trace of platform is disabled for this process
- TRACE_category_unset(SIMIX_process_self());
- ret = 0;
- }
- }
+ TRACE_internal_smpi_set_category (category);
//begin bench after changing process's category
smpi_bench_begin();
}