Ticket #76 (closed defect: fixed)
platform dependence for number of reading nodes
| Reported by: | gunnar | Owned by: | gnugo |
|---|---|---|---|
| Priority: | normal | Milestone: | 3.7.9 |
| Component: | source | Version: | |
| Severity: | normal | Keywords: | |
| Cc: | patch: | yes |
Description
As discussed in the thread starting with http://lists.gnu.org/archive/html/gnugo-devel/2006-01/index.html there's a small difference in the number of reading nodes between "Gcc version 4.0.3 20041201 (Debian Testing) on a Intel(R) Pentium(R) D CPU 3.20GHz." and a set of other platforms.
There are deviations in nngs.tst, century2002.tst, and olympiad2004.tst.
Attachments
Regression Results
| Attachment | Rev. | PASS | FAIL | Nodes | Status | |
| arend_7_9.7.diff | never tested |
Change History
comment:2 Changed 6 years ago by gunnar
A further localization of the century2002:190 deviation is to change MIN_READING_NODES_TO_REPORT in cache.h to 0 and then run
../interface/gnugo -l games/century21-2002/gnugo-katsunari.sgf -L 26 --decide-owl C3 -d0x8000
This turns up an extra
defend B3(B3) = 5 C1 , 1 nodes W:D3 B:C2 W:C4 B:B4 W:D2 B:A3 W:B2 B:B5 W:B3
for the "common" platforms. This happens in the checking of constraints (possibly implicit ones like move safety) for owl patterns. There might be a difference in which patterns are included in pattern lists, but this is so far uncertain.
comment:3 Changed 6 years ago by arend
I can reproduce the difference on a single machine. For century2002:190, I get
- 835219 reading nodes when compiled with -O2 -g
- 835220 reading nodes when complied with -O2 -g -march=pentium-m (my default setting)
This is with gcc (GCC) 4.0.2 20050901 (prerelease) (SUSE Linux).
Changed 6 years ago by arend
-
attachment
arend_7_9.7.diff
added
Carefully normalize combinable pattern values to integers
comment:4 Changed 6 years ago by arend
- patch set
As usual, this turned out to be instable floating point comparisons. Owl pattern values are unfortunately stored as floating point. This isn't usually a problem, since they all have integer values. Except that valuate_combinable_pattern_chain() computed the value internally as float and didn't use gg_normalize_float2int when converting back to integer.
This is fixed by the attached arend_7_9.7.diff, which also improves the output of dump_pattern_list(list) a little.

The deviations are more exactly in century2002:190, olympiad2004:501, and nngs:1620.