Prevent zero values in the mark API
These values cannot be differentiated from a null value, due to a Paraver limitation.
This commit is contained in:
parent
670edb6ddc
commit
c803a7566f
@ -40,7 +40,13 @@ void ovni_mark_label(int32_t type, int64_t value, const char *label);
|
|||||||
### Emit events
|
### Emit events
|
||||||
|
|
||||||
All mark channels begin with the default value *null*, which is not shown in
|
All mark channels begin with the default value *null*, which is not shown in
|
||||||
Paraver and will be displayed as the usual empty space.
|
Paraver and will be displayed as the usual empty space. The value of the channel
|
||||||
|
can be changed over time with the following functions.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
|
||||||
|
The value 0 is forbidden, as it is used by Paraver to represent the
|
||||||
|
"empty" state.
|
||||||
|
|
||||||
If you have used a single channel (without `OVNI_MARK_STACK`), then you must use
|
If you have used a single channel (without `OVNI_MARK_STACK`), then you must use
|
||||||
the following call to emit events at runtime:
|
the following call to emit events at runtime:
|
||||||
|
@ -624,6 +624,11 @@ mark_event(struct emu *emu)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value == 0) {
|
||||||
|
err("mark value cannot be zero, type %ld", type);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
long index = mc->index;
|
long index = mc->index;
|
||||||
struct ovni_thread *oth = EXT(emu->thread, 'O');
|
struct ovni_thread *oth = EXT(emu->thread, 'O');
|
||||||
struct ovni_mark_thread *mth = &oth->mark;
|
struct ovni_mark_thread *mth = &oth->mark;
|
||||||
|
@ -1136,6 +1136,9 @@ ovni_mark_label(int32_t type, int64_t value, const char *label)
|
|||||||
void
|
void
|
||||||
ovni_mark_push(int32_t type, int64_t value)
|
ovni_mark_push(int32_t type, int64_t value)
|
||||||
{
|
{
|
||||||
|
if (value == 0)
|
||||||
|
die("value cannot be 0, type %ld", (long) type);
|
||||||
|
|
||||||
struct ovni_ev ev = {0};
|
struct ovni_ev ev = {0};
|
||||||
ovni_ev_set_clock(&ev, ovni_clock_now());
|
ovni_ev_set_clock(&ev, ovni_clock_now());
|
||||||
ovni_ev_set_mcv(&ev, "OM[");
|
ovni_ev_set_mcv(&ev, "OM[");
|
||||||
@ -1147,6 +1150,9 @@ ovni_mark_push(int32_t type, int64_t value)
|
|||||||
void
|
void
|
||||||
ovni_mark_pop(int32_t type, int64_t value)
|
ovni_mark_pop(int32_t type, int64_t value)
|
||||||
{
|
{
|
||||||
|
if (value == 0)
|
||||||
|
die("value cannot be 0, type %ld", (long) type);
|
||||||
|
|
||||||
struct ovni_ev ev = {0};
|
struct ovni_ev ev = {0};
|
||||||
ovni_ev_set_clock(&ev, ovni_clock_now());
|
ovni_ev_set_clock(&ev, ovni_clock_now());
|
||||||
ovni_ev_set_mcv(&ev, "OM]");
|
ovni_ev_set_mcv(&ev, "OM]");
|
||||||
@ -1158,6 +1164,9 @@ ovni_mark_pop(int32_t type, int64_t value)
|
|||||||
void
|
void
|
||||||
ovni_mark_set(int32_t type, int64_t value)
|
ovni_mark_set(int32_t type, int64_t value)
|
||||||
{
|
{
|
||||||
|
if (value == 0)
|
||||||
|
die("value cannot be 0, type %ld", (long) type);
|
||||||
|
|
||||||
struct ovni_ev ev = {0};
|
struct ovni_ev ev = {0};
|
||||||
ovni_ev_set_clock(&ev, ovni_clock_now());
|
ovni_ev_set_clock(&ev, ovni_clock_now());
|
||||||
ovni_ev_set_mcv(&ev, "OM=");
|
ovni_ev_set_mcv(&ev, "OM=");
|
||||||
|
@ -46,9 +46,7 @@ main(void)
|
|||||||
ovni_mark_label(MARK_COLORS, COL_GRAY, "Gray");
|
ovni_mark_label(MARK_COLORS, COL_GRAY, "Gray");
|
||||||
ovni_mark_label(MARK_COLORS, COL_RED, "Red");
|
ovni_mark_label(MARK_COLORS, COL_RED, "Red");
|
||||||
|
|
||||||
for (int i = 0; i < 100; i++) {
|
for (int i = 1; i <= 100; i++) {
|
||||||
ovni_mark_set(MARK_PROGRESS, i);
|
|
||||||
|
|
||||||
int which = 1 + (rand() % 3);
|
int which = 1 + (rand() % 3);
|
||||||
|
|
||||||
/* Simulate a thread goes to sleep */
|
/* Simulate a thread goes to sleep */
|
||||||
@ -61,9 +59,9 @@ main(void)
|
|||||||
|
|
||||||
if (rank == 0 && i == 75)
|
if (rank == 0 && i == 75)
|
||||||
instr_thread_resume();
|
instr_thread_resume();
|
||||||
}
|
|
||||||
|
|
||||||
ovni_mark_set(MARK_PROGRESS, 100);
|
ovni_mark_set(MARK_PROGRESS, i);
|
||||||
|
}
|
||||||
|
|
||||||
instr_end();
|
instr_end();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user