From e0c47a6cebbea453a1e74ca8ce1f5f8219b9b3f8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 15 Aug 2009 15:18:17 +0100 Subject: [PATCH] L1/L2 friendly PhaseTable[] In Movepicker c'tor we access during initialization one of MainSearchPhaseIndex..QsearchWithoutChecksPhaseIndex globals. Postpone definition of PhaseTable[] just after them so that when PhaseTable[] will be accessed later in get_next_move() it will be already present in L1/L2. It works like an implicit prefetching of PhaseTable[]. Also shrink PhaseTable[] to fit an L1 cache line of 16 bytes using uint8_t instead of int. This apparentely innocuous patch gives an astonish speed up of 1.6% under MSVC 2010 beta, pgo optimized ! No functional change. Signed-off-by: Marco Costalba --- src/movepick.cpp | 4 ++-- src/types.h | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/movepick.cpp b/src/movepick.cpp index 4529af7d..77c42efa 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -42,12 +42,12 @@ namespace { /// Variables - MovePicker::MovegenPhase PhaseTable[32]; + CACHE_LINE_ALIGNMENT int MainSearchPhaseIndex; int EvasionsPhaseIndex; int QsearchWithChecksPhaseIndex; int QsearchWithoutChecksPhaseIndex; - + uint8_t PhaseTable[32]; } diff --git a/src/types.h b/src/types.h index 95e3f6ee..a9badca0 100644 --- a/src/types.h +++ b/src/types.h @@ -66,4 +66,11 @@ typedef uint64_t Bitboard; #define USE_BSFQ #endif +// Cache line alignment specification +#if defined(_MSC_VER) || defined(__INTEL_COMPILER) +#define CACHE_LINE_ALIGNMENT __declspec(align(64)) +#else +#define CACHE_LINE_ALIGNMENT __attribute__ ((aligned(64))) +#endif + #endif // !defined(TYPES_H_INCLUDED) -- 2.39.2