[riot-notifications] [RIOT-OS/RIOT] sys: Added simple memory barrier API (#11438)

Marian Buschsieweke notifications at github.com
Wed Apr 24 17:25:12 CEST 2019


maribu commented on this pull request.



> + * uint16_t measure_time(void) {
+ *     uint16_t pre = TIMER;
+ *     do_computing();
+ *     uint16_t post = TIMER;
+ *     return pre - post;
+ * }
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * In the above example the compiler will now dutifully generate code to access
+ * the timer register two times. The compiler will also not reorder any
+ * `volatile` memory access in regard to any other `volatile` memory access.
+ * But some compilers will reorder non-`volatile` accesses across `volatile`
+ * memory accesses. If the implementation of `do_computing()` is visible to the
+ * compiler, the compiler may conclude that do_computing() could be moved
+ * above the first or below the second access to `TIMER`, which will render the
+ * benchmark meaningless. (**Beware:** Even if `do_something()` is an external

@kaspar030: You can observe that compiler barriers do make a difference in https://github.com/RIOT-OS/RIOT/pull/11440, where those are added to `irq_disable()`, `irq_restore()` for the ARMv7 platform etc. Those barriers do not make any difference when compiling without LTO, as the function calls are treated as barriers then. (Unless I missed something in the doc, the ARMv7 platform is in-order, so no hardware memory barriers are used there.)

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/RIOT-OS/RIOT/pull/11438#discussion_r278183491
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/notifications/attachments/20190424/014ffb05/attachment.html>


More information about the notifications mailing list