1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-12 03:59:15 +00:00

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 <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2009-08-15 15:18:17 +01:00
parent f3d0b76feb
commit e0c47a6ceb
2 changed files with 9 additions and 2 deletions

View file

@ -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];
}

View file

@ -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)