Browse Source

AK: Allow alignment to cache line size with CACHE_ALIGNED

This is particularly important to avoid false sharing, which thrashes
performance when two process-shared atomics are on the same cache line.
kleines Filmröllchen 3 years ago
parent
commit
65b338ad04
1 changed files with 13 additions and 0 deletions
  1. 13 0
      AK/Platform.h

+ 13 - 0
AK/Platform.h

@@ -110,3 +110,16 @@ extern "C" {
 #    define CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC
 #    define CLOCK_REALTIME_COARSE CLOCK_REALTIME
 #endif
+
+#ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
+#    if ARCH(AARCH64) || ARCH(x86_64)
+#        define SYSTEM_CACHE_ALIGNMENT_SIZE 64
+#    else
+#        define SYSTEM_CACHE_ALIGNMENT_SIZE 128
+#    endif
+#endif /* SYSTEM_CACHE_ALIGNMENT_SIZE */
+
+#ifdef CACHE_ALIGNED
+#    undef CACHE_ALIGNED
+#endif
+#define CACHE_ALIGNED alignas(SYSTEM_CACHE_ALIGNMENT_SIZE)