diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2026-01-09 21:49:44 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2026-01-09 21:49:44 +0100 |
| commit | 6f09b8583d46d6f6e9e40113ac5fce1675672bf4 (patch) | |
| tree | ba83abc94f093b3c1eb799cec6dd24d24936ff90 /src | |
| parent | 87134421a671a0e26c281980285761aee403a425 (diff) | |
| download | nissy-core-6f09b8583d46d6f6e9e40113ac5fce1675672bf4.tar.gz nissy-core-6f09b8583d46d6f6e9e40113ac5fce1675672bf4.zip | |
Avoid duplicate lookups for tasks
Diffstat (limited to 'src')
| -rw-r--r-- | src/solvers/h48/solve.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/solvers/h48/solve.h b/src/solvers/h48/solve.h index ce9f4c4..15ac6ea 100644 --- a/src/solvers/h48/solve.h +++ b/src/solvers/h48/solve.h | |||
| @@ -8,6 +8,7 @@ typedef struct { | |||
| 8 | uint8_t moves[H48_STARTING_MOVES]; | 8 | uint8_t moves[H48_STARTING_MOVES]; |
| 9 | int64_t rank; | 9 | int64_t rank; |
| 10 | uint64_t tmask[H48_STARTING_MOVES]; | 10 | uint64_t tmask[H48_STARTING_MOVES]; |
| 11 | uint8_t pval; | ||
| 11 | } solve_h48_task_t; | 12 | } solve_h48_task_t; |
| 12 | 13 | ||
| 13 | typedef struct { | 14 | typedef struct { |
| @@ -124,6 +125,7 @@ h48_prune_lookup( | |||
| 124 | { | 125 | { |
| 125 | uint8_t p, pmin, pe; | 126 | uint8_t p, pmin, pe; |
| 126 | 127 | ||
| 128 | arg->table_lookups++; | ||
| 127 | p = get_h48_pval_and_min(arg->h48data, coord, &pmin); | 129 | p = get_h48_pval_and_min(arg->h48data, coord, &pmin); |
| 128 | if (p == 0) { | 130 | if (p == 0) { |
| 129 | arg->table_fallbacks++; | 131 | arg->table_fallbacks++; |
| @@ -218,7 +220,6 @@ h48_prune_pipeline( | |||
| 218 | continue; | 220 | continue; |
| 219 | 221 | ||
| 220 | if (prune[m].pi == 0) { | 222 | if (prune[m].pi == 0) { |
| 221 | arg->table_lookups++; | ||
| 222 | prune[m].pi = h48_prune_lookup( | 223 | prune[m].pi = h48_prune_lookup( |
| 223 | prune[m].coord, prune[m].inverse, arg); | 224 | prune[m].coord, prune[m].inverse, arg); |
| 224 | if (prune[m].pi > target) { | 225 | if (prune[m].pi > target) { |
| @@ -243,7 +244,6 @@ h48_prune_pipeline( | |||
| 243 | if (prune[m].stop) | 244 | if (prune[m].stop) |
| 244 | continue; | 245 | continue; |
| 245 | 246 | ||
| 246 | arg->table_lookups++; | ||
| 247 | prune[m].pn = h48_prune_lookup( | 247 | prune[m].pn = h48_prune_lookup( |
| 248 | prune[m].coord, prune[m].cube, arg); | 248 | prune[m].coord, prune[m].cube, arg); |
| 249 | prune[m].stop = prune[m].pn > target; | 249 | prune[m].stop = prune[m].pn > target; |
| @@ -387,7 +387,7 @@ STATIC void * | |||
| 387 | solve_h48_runthread(void *arg) | 387 | solve_h48_runthread(void *arg) |
| 388 | { | 388 | { |
| 389 | int i, j; | 389 | int i, j; |
| 390 | uint8_t lastmove, p; | 390 | uint8_t lastmove; |
| 391 | int64_t d, f, nprev; | 391 | int64_t d, f, nprev; |
| 392 | dfsarg_solve_h48_t *dfsarg; | 392 | dfsarg_solve_h48_t *dfsarg; |
| 393 | 393 | ||
| @@ -412,9 +412,8 @@ solve_h48_runthread(void *arg) | |||
| 412 | dfsarg->inverse = inverse(dfsarg->cube); | 412 | dfsarg->inverse = inverse(dfsarg->cube); |
| 413 | 413 | ||
| 414 | dfsarg->nodes_visited++; | 414 | dfsarg->nodes_visited++; |
| 415 | dfsarg->table_lookups++; | 415 | if (dfsarg->tasks[i].pval + H48_STARTING_MOVES |
| 416 | p = h48_prune_lookup_nocoord(dfsarg->cube, dfsarg); | 416 | > dfsarg->target_depth) |
| 417 | if (p + H48_STARTING_MOVES > dfsarg->target_depth) | ||
| 418 | continue; | 417 | continue; |
| 419 | 418 | ||
| 420 | dfsarg->lb_normal = 0; | 419 | dfsarg->lb_normal = 0; |
| @@ -482,6 +481,8 @@ solve_h48_maketasks( | |||
| 482 | 481 | ||
| 483 | if (mtarg->nmoves == H48_STARTING_MOVES) { | 482 | if (mtarg->nmoves == H48_STARTING_MOVES) { |
| 484 | tasks[*ntasks].cube = mtarg->cube; | 483 | tasks[*ntasks].cube = mtarg->cube; |
| 484 | tasks[*ntasks].pval = | ||
| 485 | h48_prune_lookup_nocoord(mtarg->cube, solve_arg); | ||
| 485 | memcpy(tasks[*ntasks].moves, mtarg->moves, | 486 | memcpy(tasks[*ntasks].moves, mtarg->moves, |
| 486 | H48_STARTING_MOVES * sizeof(uint8_t)); | 487 | H48_STARTING_MOVES * sizeof(uint8_t)); |
| 487 | memcpy(tasks[*ntasks].tmask, mtarg->tmask, | 488 | memcpy(tasks[*ntasks].tmask, mtarg->tmask, |
