commit 151eb26baf355d3c5dcedf8cd0671b02e1004095
parent f64a5a67a37015bd5066efd9b1edb6ac3e0b7a97
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Sun, 21 Jul 2024 00:03:47 +0200
Tiny performance gains
Diffstat:
3 files changed, 10 insertions(+), 25 deletions(-)
diff --git a/src/cube_transform_with_switch.h b/src/cube_transform_with_switch.h
@@ -22,7 +22,7 @@ transform_edges(cube_t c, uint8_t t)
{
switch (t) {
case _trans_UFr:
- return _trans_edges_rotation(UFr, c);
+ return c;
case _trans_ULr:
return _trans_edges_rotation(ULr, c);
case _trans_UBr:
@@ -128,7 +128,7 @@ transform_corners(cube_t c, uint8_t t)
{
switch (t) {
case _trans_UFr:
- return _trans_corners_rotation(UFr, c);
+ return c;
case _trans_ULr:
return _trans_corners_rotation(ULr, c);
case _trans_UBr:
@@ -234,7 +234,7 @@ transform(cube_t c, uint8_t t)
{
switch (t) {
case _trans_UFr:
- return _trans_rotation(UFr, c);
+ return c;
case _trans_ULr:
return _trans_rotation(ULr, c);
case _trans_UBr:
diff --git a/src/solve_h48.h b/src/solve_h48.h
@@ -35,13 +35,14 @@ _t by _ttrep).
#define _foreach_h48sim(_cube, _cocsepdata, _selfsim, _h, _action) \
int64_t _cocsep = coord_cocsep(_cube); \
uint8_t _ttrep = TTREP(_cocsepdata[_cocsep]); \
+ uint8_t _inverse_ttrep = inverse_trans(_ttrep); \
int64_t _coclass = COCLASS(_cocsepdata[_cocsep]); \
cube_t _rep = transform(_cube, _ttrep); \
uint64_t _sim = _selfsim[_coclass]; \
for (uint8_t _t = 0; _t < 48 && _sim; _t++, _sim >>= 1) { \
if (!(_sim & 1)) continue; \
_cube = transform(_rep, _t); \
- _cube = transform(_cube, inverse_trans(_ttrep)); \
+ _cube = transform(_cube, _inverse_ttrep); \
_action \
}
@@ -512,7 +513,9 @@ gendata_h48h0k4_return_size:
_static int64_t
gendata_h48h0k4_bfs(bfsarg_esep_t *arg)
{
- if (2 * arg->done < (int64_t)ESEP_MAX(0))
+ const uint8_t breakpoint = 10; /* Hand-picked optimal */
+
+ if (arg->depth < breakpoint)
return gendata_h48h0k4_bfs_fromdone(arg);
else
return gendata_h48h0k4_bfs_fromnew(arg);
@@ -567,31 +570,13 @@ gendata_h48h0k4_bfs_fromnew(bfsarg_esep_t *arg)
x = get_esep_pval(arg->buf32, j);
if (x >= arg->depth)
continue;
-#if 0
- cube_t transd;
- int64_t t, cocsep_coord, sim;
-
- set_esep_pval(arg->buf32, i, arg->depth);
- cc++;
- cocsep_coord = i / H48_ESIZE(0);
- sim = arg->selfsim[cocsep_coord] >> 1;
- for (t = 1; t < 48 && sim; t++) {
- transd = transform(cube, t);
- j = coord_h48(transd, arg->cocsepdata, 0);
- x = get_esep_pval(arg->buf32, j);
- set_esep_pval(arg->buf32, j, arg->depth);
- cc += x == 0xF;
- }
-#else
_foreach_h48sim(cube, arg->cocsepdata, arg->selfsim, 0,
j = coord_h48(cube, arg->cocsepdata, 0);
x = get_esep_pval(arg->buf32, j);
set_esep_pval(arg->buf32, j, arg->depth);
cc += x == 0xF;
)
-#endif
-
- break;
+ break; /* Enough to find one, skip the rest */
}
}
diff --git a/tools/gendata_h48/gendata_h48.c b/tools/gendata_h48/gendata_h48.c
@@ -23,7 +23,7 @@ void run(void) {
} else {
printf("Succesfully generated %" PRId64 " bytes. Table:\n", s);
h48info = (uint32_t *)buf + (ETABLESIZE(HVALUE) + COCSEPSIZE) / 4;
- for (i = 0; i < MAXDEPTH+1; i++)
+ for (i = 0; i < MAXDEPTH+1 && h48info[i+1]; i++)
printf("%d:\t%" PRIu32 "\n", i, h48info[i+1]);
}
}