[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnugo-devel] influence patch
From: |
Gunnar Farneback |
Subject: |
[gnugo-devel] influence patch |
Date: |
Sun, 07 Apr 2002 15:17:03 +0200 |
User-agent: |
EMH/1.14.1 SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/20.7 (sparc-sun-solaris2.7) (with unibyte mode) |
This patch adds a cache for recent results of
compute_escape_influence(). This gives a speedup which usually
probably is minor but substantial when running aftermath scoring.
- caching of recent compute_escape_influence() results
/Gunnar
Index: engine/influence.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/influence.c,v
retrieving revision 1.48
diff -u -r1.48 influence.c
--- engine/influence.c 1 Apr 2002 21:36:04 -0000 1.48
+++ engine/influence.c 4 Apr 2002 09:24:39 -0000
@@ -1805,9 +1825,47 @@
int dragons_known)
{
int i, j;
+ int k;
int ii;
int save_experimental_influence;
+ /* IMPORTANT: This caching relies on the fact that the goal
+ * parameter currently is not used.
+ */
+ static int cached_board[BOARDMAX];
+ static int escape_values[BOARDMAX][4];
+ static int active_caches[4];
+
+ /* Encode the values of color and dragons_known into an integer
+ * between 0 and 3.
+ */
+ int cache_number = 2 * (color == WHITE) + dragons_known;
+
+ int board_was_cached = 1;
+
+ /* Notice that we compare the out of board markers as well, in case
+ * the board size should have changed between calls.
+ */
+ for (ii = BOARDMIN; ii < BOARDMAX; ii++) {
+ if (cached_board[ii] != board[ii]) {
+ cached_board[ii] = board[ii];
+ board_was_cached = 0;
+ }
+ }
+
+ if (!board_was_cached)
+ for (k = 0; k < 4; k++)
+ active_caches[k] = 0;
+
+ if (active_caches[cache_number]) {
+ for (ii = BOARDMIN; ii < BOARDMAX; ii++)
+ if (ON_BOARD(ii))
+ escape_value[ii] = escape_values[ii][cache_number];
+
+ return;
+ }
+
+
/* Use traditional influence for escape influence. */
save_experimental_influence = experimental_influence;
experimental_influence = 0;
@@ -1837,6 +1895,12 @@
"%3.0f", 3, 1);
}
experimental_influence = save_experimental_influence;
+
+ /* Save the computed values in the cache. */
+ for (ii = BOARDMIN; ii < BOARDMAX; ii++)
+ if (ON_BOARD(ii))
+ escape_values[ii][cache_number] = escape_value[ii];
+ active_caches[cache_number] = 1;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnugo-devel] influence patch,
Gunnar Farneback <=