numeric-linalg

Educational material on the SciPy implementation of numerical linear algebra algorithms

Commit
f529d36ef76eacfbad8d463b547b3b8a8db9be7e
Parent
1497e5933ac42eeb193dd11272e0227f51521c0a
Author
Pablo <pablo-pie@riseup.net>
Date

Minor tweak in perf.h

Diffstat

1 file changed, 4 insertions, 6 deletions

Status File Name N° Changes Insertions Deletions
Modified getrf/benchmarks/src/perf.h 10 4 6
diff --git a/getrf/benchmarks/src/perf.h b/getrf/benchmarks/src/perf.h
@@ -65,10 +65,6 @@ typedef struct {
 
 typedef struct {
   int fds[PERF_EVENT_COUNT];
-  union {
-    uint64_t   raw_result[PERF_EVENT_COUNT];
-    PerfResult result;
-  };
 } PerfRecorder;
 
 void perf_start_recording(PerfRecorder *pr, size_t cpu_id)
@@ -100,9 +96,11 @@ void perf_start_recording(PerfRecorder *pr, size_t cpu_id)
 
 PerfResult perf_stop_recording(PerfRecorder *pr)
 {
+  union { uint64_t raw_result[PERF_EVENT_COUNT]; PerfResult result; } r;
+
   for (size_t i = 0; i < PERF_EVENT_COUNT; i++) {
     ioctl(pr->fds[i], PERF_EVENT_IOC_DISABLE, 0); // stop counting
-    if (!read(pr->fds[i], &pr->raw_result[i], sizeof(uint64_t))) {
+    if (!read(pr->fds[i], &r.raw_result[i], sizeof(uint64_t))) {
       fprintf(stderr, "ERROR: Coulnd't read perf counter for %s!\n",
               perf_event_str[i]);
       exit(EXIT_FAILURE);
@@ -110,7 +108,7 @@ PerfResult perf_stop_recording(PerfRecorder *pr)
     close(pr->fds[i]);
   }
 
-  return pr->result;
+  return r.result;
 }
 
 #endif // PERF_H_