Ticket #76 (closed defect: fixed)

Opened 3 years ago

Last modified 3 years ago

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

arend_7_9.7.diff (1.8 kB) - added by arend 3 years ago.
Carefully normalize combinable pattern values to integers

Regression Results

Attachment Rev. PASS FAIL Nodes Status
arend_7_9.7.diff never tested

Change History

Changed 3 years ago by gunnar

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

Changed 3 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.

Changed 3 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 3 years ago by arend

Carefully normalize combinable pattern values to integers

Changed 3 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.

Changed 3 years ago by arend

  • status changed from new to closed
  • resolution set to fixed

Changed 3 years ago by gunnar

  • milestone changed from 3.8 to 3.7.9
Note: See TracTickets for help on using tickets.