[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