Add rank support in metadata
This commit is contained in:
parent
6c35d632f2
commit
1b1ca7e232
44
cfg/cpu-nosv-task-rank.cfg
Normal file
44
cfg/cpu-nosv-task-rank.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: nOS-V task rank+1 of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: nOS-V task rank+1 of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 300
|
||||
window_position_y 300
|
||||
window_width 954
|
||||
window_height 236
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
window_noncolor_mode true
|
||||
window_color_mode window_in_null_gradient_mode
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 4.000000000000
|
||||
window_minimum_y 1.000000000000
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 74
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
44
cfg/thread-nosv-task-rank.cfg
Normal file
44
cfg/thread-nosv-task-rank.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: nOS-V task rank+1 of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name Thread: nOS-V task rank+1 of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 300
|
||||
window_position_y 300
|
||||
window_width 954
|
||||
window_height 236
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
window_noncolor_mode true
|
||||
window_color_mode window_in_null_gradient_mode
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 4.000000000000
|
||||
window_minimum_y 1.000000000000
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 24
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
4
emu.h
4
emu.h
@ -148,6 +148,7 @@ enum chan {
|
||||
CHAN_NOSV_TYPEID,
|
||||
CHAN_NOSV_APPID,
|
||||
CHAN_NOSV_SUBSYSTEM,
|
||||
CHAN_NOSV_RANK,
|
||||
|
||||
CHAN_TAMPI_MODE,
|
||||
CHAN_OPENMP_MODE,
|
||||
@ -189,6 +190,7 @@ static const int chan_to_prvtype[CHAN_MAX][3] = {
|
||||
{ CHAN_NOSV_TYPEID, 21, 71 },
|
||||
{ CHAN_NOSV_APPID, 22, 72 },
|
||||
{ CHAN_NOSV_SUBSYSTEM, 23, 73 },
|
||||
{ CHAN_NOSV_RANK, 24, 74 },
|
||||
{ CHAN_TAMPI_MODE, 30, 80 },
|
||||
{ CHAN_OPENMP_MODE, 40, 90 },
|
||||
{ CHAN_NODES_SUBSYSTEM, 50, 100 },
|
||||
@ -304,6 +306,7 @@ struct ovni_eproc {
|
||||
int index;
|
||||
int gindex;
|
||||
int appid;
|
||||
int rank;
|
||||
|
||||
/* The loom of the current process */
|
||||
struct ovni_loom *loom;
|
||||
@ -389,6 +392,7 @@ struct ovni_loom {
|
||||
size_t ncpus;
|
||||
size_t offset_ncpus;
|
||||
struct ovni_cpu *cpu;
|
||||
int rank_enabled;
|
||||
|
||||
int64_t clock_offset;
|
||||
|
||||
|
@ -50,6 +50,7 @@ hook_init_nosv(struct ovni_emu *emu)
|
||||
chan_th_init(th, uth, CHAN_NOSV_TASKID, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_th, clock);
|
||||
chan_th_init(th, uth, CHAN_NOSV_TYPEID, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_th, clock);
|
||||
chan_th_init(th, uth, CHAN_NOSV_APPID, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_th, clock);
|
||||
chan_th_init(th, uth, CHAN_NOSV_RANK, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_th, clock);
|
||||
|
||||
/* We allow threads to emit subsystem events in cooling and
|
||||
* warming states as well, as they may be allocating memory.
|
||||
@ -68,6 +69,7 @@ hook_init_nosv(struct ovni_emu *emu)
|
||||
chan_cpu_init(cpu, ucpu, CHAN_NOSV_TASKID, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_cpu, clock);
|
||||
chan_cpu_init(cpu, ucpu, CHAN_NOSV_TYPEID, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_cpu, clock);
|
||||
chan_cpu_init(cpu, ucpu, CHAN_NOSV_APPID, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_cpu, clock);
|
||||
chan_cpu_init(cpu, ucpu, CHAN_NOSV_RANK, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_cpu, clock);
|
||||
chan_cpu_init(cpu, ucpu, CHAN_NOSV_SUBSYSTEM, CHAN_TRACK_TH_RUNNING, 0, 0, 1, row, prv_cpu, clock);
|
||||
}
|
||||
}
|
||||
@ -264,6 +266,9 @@ pre_task_running(struct ovni_emu *emu, struct nosv_task *task)
|
||||
chan_set(&th->chan[CHAN_NOSV_TYPEID], task->type_id);
|
||||
chan_set(&th->chan[CHAN_NOSV_APPID], proc->appid);
|
||||
|
||||
if(emu->cur_loom->rank_enabled)
|
||||
chan_set(&th->chan[CHAN_NOSV_RANK], proc->rank + 1);
|
||||
|
||||
chan_push(&th->chan[CHAN_NOSV_SUBSYSTEM], ST_NOSV_TASK_RUNNING);
|
||||
}
|
||||
|
||||
@ -278,6 +283,9 @@ pre_task_not_running(struct ovni_emu *emu)
|
||||
chan_set(&th->chan[CHAN_NOSV_TYPEID], 0);
|
||||
chan_set(&th->chan[CHAN_NOSV_APPID], 0);
|
||||
|
||||
if(emu->cur_loom->rank_enabled)
|
||||
chan_set(&th->chan[CHAN_NOSV_RANK], 0);
|
||||
|
||||
chan_pop(&th->chan[CHAN_NOSV_SUBSYSTEM], ST_NOSV_TASK_RUNNING);
|
||||
}
|
||||
|
||||
|
18
ovni.c
18
ovni.c
@ -191,6 +191,24 @@ proc_set_app(int appid)
|
||||
die("json_object_set_number for app_id failed\n");
|
||||
}
|
||||
|
||||
void
|
||||
ovni_proc_set_rank(int rank, int nranks)
|
||||
{
|
||||
if(!rproc.ready)
|
||||
die("ovni_proc_set_rank: process not yet initialized\n");
|
||||
|
||||
JSON_Object *meta = json_value_get_object(rproc.meta);
|
||||
|
||||
if(meta == NULL)
|
||||
die("json_value_get_object failed\n");
|
||||
|
||||
if(json_object_set_number(meta, "rank", rank) != 0)
|
||||
die("json_object_set_number for rank failed\n");
|
||||
|
||||
if(json_object_set_number(meta, "nranks", nranks) != 0)
|
||||
die("json_object_set_number for nranks failed\n");
|
||||
}
|
||||
|
||||
void
|
||||
ovni_proc_init(int app, const char *loom, int pid)
|
||||
{
|
||||
|
3
ovni.h
3
ovni.h
@ -128,6 +128,9 @@ struct ovni_rproc {
|
||||
|
||||
void ovni_proc_init(int app, const char *loom, int pid);
|
||||
|
||||
/* Sets the MPI rank of the current process and the number of total nranks */
|
||||
void ovni_proc_set_rank(int rank, int nranks);
|
||||
|
||||
void ovni_proc_fini(void);
|
||||
|
||||
void ovni_thread_init(pid_t tid);
|
||||
|
37
trace.c
37
trace.c
@ -97,7 +97,7 @@ load_thread(struct ovni_ethread *thread, struct ovni_eproc *proc, int index, int
|
||||
}
|
||||
|
||||
static void
|
||||
load_proc_metadata(struct ovni_eproc *proc)
|
||||
load_proc_metadata(struct ovni_eproc *proc, int *rank_enabled)
|
||||
{
|
||||
JSON_Object *meta;
|
||||
|
||||
@ -105,7 +105,23 @@ load_proc_metadata(struct ovni_eproc *proc)
|
||||
if(meta == NULL)
|
||||
die("load_proc_metadata: json_value_get_object() failed\n");
|
||||
|
||||
proc->appid = (int) json_object_get_number(meta, "app_id");
|
||||
JSON_Value *appid_val = json_object_get_value(meta, "app_id");
|
||||
if(appid_val == NULL)
|
||||
die("process %d is missing app_id in metadata\n", proc->pid);
|
||||
|
||||
proc->appid = (int) json_number(appid_val);
|
||||
|
||||
JSON_Value *rank_val = json_object_get_value(meta, "rank");
|
||||
|
||||
if(rank_val != NULL)
|
||||
{
|
||||
proc->rank = (int) json_number(rank_val);
|
||||
*rank_enabled = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
proc->rank = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -141,7 +157,7 @@ load_proc(struct ovni_eproc *proc, struct ovni_loom *loom, int index, int pid, c
|
||||
}
|
||||
|
||||
/* The appid is populated from the metadata */
|
||||
load_proc_metadata(proc);
|
||||
load_proc_metadata(proc, &loom->rank_enabled);
|
||||
|
||||
if((dir = opendir(procdir)) == NULL)
|
||||
{
|
||||
@ -211,6 +227,7 @@ load_loom(struct ovni_loom *loom, char *loomdir)
|
||||
return -1;
|
||||
}
|
||||
|
||||
loom->rank_enabled = 0;
|
||||
loom->nprocs = count_dir_prefix(dir, "proc");
|
||||
|
||||
if(loom->nprocs <= 0)
|
||||
@ -259,6 +276,20 @@ load_loom(struct ovni_loom *loom, char *loomdir)
|
||||
|
||||
closedir(dir);
|
||||
|
||||
/* Ensure all process have the rank, if enabled in any */
|
||||
if(loom->rank_enabled)
|
||||
{
|
||||
for(i = 0; i < loom->nprocs; i++)
|
||||
{
|
||||
struct ovni_eproc *proc = &loom->proc[i];
|
||||
if(proc->rank < 0)
|
||||
{
|
||||
die("process %d is missing the rank\n",
|
||||
proc->pid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user