소스 검색

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 년 전
부모
커밋
65b338ad04
1개의 변경된 파일13개의 추가작업 그리고 0개의 파일을 삭제
  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)