From 83270dcaeae598323b9cb2ae5a1a892ac5f72091 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 28 Dec 2025 22:51:12 +0100 Subject: Prefetch --- src/solvers/h48/solve.h | 7 +++++-- src/utils/prefetch.h | 15 +++++++++++++++ src/utils/utils.h | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/utils/prefetch.h (limited to 'src') diff --git a/src/solvers/h48/solve.h b/src/solvers/h48/solve.h index c51fa29..6a29b82 100644 --- a/src/solvers/h48/solve.h +++ b/src/solvers/h48/solve.h @@ -138,6 +138,7 @@ h48_prune_pipeline( bool normal ) { + uint64_t i; uint32_t cdata; uint8_t m, p; @@ -184,7 +185,8 @@ h48_prune_pipeline( if (prune[m].pi == 0) { prune[m].coord = coord_h48_edges(prune[m].inverse, COCLASS(cdata), TTREP(cdata), arg->h); - // TODO prefetch + i = H48_INDEX(H48_LINE_EXT(prune[m].coord)); + prefetch(arg->h48data, i); } } @@ -210,7 +212,8 @@ h48_prune_pipeline( } prune[m].coord = coord_h48_edges( prune[m].cube, COCLASS(cdata), TTREP(cdata), arg->h); - // TODO prefetch + i = H48_INDEX(H48_LINE_EXT(prune[m].coord)); + prefetch(arg->h48data, i); } /* Stage 3: get pval from normal */ diff --git a/src/utils/prefetch.h b/src/utils/prefetch.h new file mode 100644 index 0000000..89b14e8 --- /dev/null +++ b/src/utils/prefetch.h @@ -0,0 +1,15 @@ +#if defined(AVX2) + +#define prefetch(a, i) _mm_prefetch(a+i, _MM_HINT_T0) + +#else +#if defined(__GNUC__) || defined(__clang__) + +#define prefetch(a, i) __builtin_prefetch(a+i, 0, 0) + +#else + +#define prefetch(a, i) (void)i + +#endif +#endif diff --git a/src/utils/utils.h b/src/utils/utils.h index 383781a..e322f20 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -4,3 +4,4 @@ #include "math.h" #include "sleep.h" #include "wrapthread.h" +#include "prefetch.h" -- cgit v1.3