[pypy-commit] stmgc c8-efficient-serial-execution: Add macros to log duration measurements using a timing event
tob...@masterthesis-vm
pypy.commits at gmail.com
Fri Mar 10 09:37:02 EST 2017
Author: tobias at masterthesis-vm
Branch: c8-efficient-serial-execution
Changeset: r2024:39dec57efb62
Date: 2017-03-06 11:36 +0100
http://bitbucket.org/pypy/stmgc/changeset/39dec57efb62/
Log: Add macros to log duration measurements using a timing event
diff --git a/c8/stm/marker.c b/c8/stm/marker.c
--- a/c8/stm/marker.c
+++ b/c8/stm/marker.c
@@ -3,9 +3,6 @@
# include "core.h" // silence flymake
#endif
-#define payload(marker) stm_timing_event_payload_data_t data = { &marker }; \
- stm_timing_event_payload_t payload = { \
- STM_EVENT_PAYLOAD_MARKER, data };
static bool marker_fetch(stm_thread_local_t *tl, stm_loc_marker_t *out_marker)
{
@@ -95,16 +92,18 @@
stm_loc_marker_t marker;
marker_fetch_obj_write(start, contention, &marker);
- payload(marker)
+ stm_marker_payload(marker)
stmcb_timing_event(STM_SEGMENT->running_thread,
- STM_CONTENTION_WRITE_READ, &payload);
+ STM_CONTENTION_WRITE_READ,
+ &stm_marker_payload);
}
static void _timing_become_inevitable(void)
{
stm_loc_marker_t marker;
marker_fetch(STM_SEGMENT->running_thread, &marker);
- payload(marker)
+ stm_marker_payload(marker)
stmcb_timing_event(STM_SEGMENT->running_thread,
- STM_BECOME_INEVITABLE, &payload);
+ STM_BECOME_INEVITABLE,
+ &stm_marker_payload);
}
diff --git a/c8/stm/marker.h b/c8/stm/marker.h
--- a/c8/stm/marker.h
+++ b/c8/stm/marker.h
@@ -16,6 +16,12 @@
#define timing_become_inevitable() \
(timing_enabled() ? _timing_become_inevitable() : (void)0)
+#define stm_marker_payload(marker) \
+ stm_timing_event_payload_data_t stm_marker_data = \
+ { .loc_marker = &marker }; \
+ stm_timing_event_payload_t stm_marker_payload = \
+ { STM_EVENT_PAYLOAD_MARKER, stm_marker_data };
+
static inline void emit_wait(stm_thread_local_t *tl, enum stm_event_e event)
{
diff --git a/c8/stm/prof.c b/c8/stm/prof.c
--- a/c8/stm/prof.c
+++ b/c8/stm/prof.c
@@ -42,8 +42,8 @@
struct timespec *duration = payload->data.duration;
buf.extra_length = sprintf(buf.extra,
"s%un%u",
- duration->tv_sec,
- duration->tv_nsec);
+ (uint32_t)duration->tv_sec,
+ (uint32_t)duration->tv_nsec);
}
}
diff --git a/c8/stm/timing.h b/c8/stm/timing.h
--- a/c8/stm/timing.h
+++ b/c8/stm/timing.h
@@ -14,3 +14,17 @@
stop.tv_sec - start.tv_sec, \
stop.tv_nsec - start.tv_nsec \
};
+
+#define stm_duration_payload(duration) \
+ stm_timing_event_payload_data_t stm_duration_data = \
+ { .duration = &duration }; \
+ stm_timing_event_payload_t stm_duration_payload = \
+ { STM_EVENT_PAYLOAD_DURATION, stm_duration_data };
+
+#define publish_event(event) \
+ stmcb_timing_event(STM_SEGMENT->running_thread, event, &stm_duration_payload);
+
+#define stop_timer_and_publish(event) stop_timer() \
+ get_duration() \
+ stm_duration_payload(duration) \
+ publish_event(event)
More information about the pypy-commit
mailing list