Author: Uri Blass
Date: 14:27:45 08/13/03
Go up one level in this thread
On August 13, 2003 at 16:36:19, Gerd Isenberg wrote: >On August 13, 2003 at 15:24:28, Uri Blass wrote: > >>On August 13, 2003 at 14:50:24, Gerd Isenberg wrote: >> >>>On August 13, 2003 at 11:56:38, Uri Blass wrote: >>> >>>>There are cases when I make changes that are not supposed to change >>>>a single global varaible(the changes can be only for speed or only some >>>>preperation for another change because new function that I write may be used >>>>later in a different way). >>>> >>>>I need for debugging purposes a function that put all >>>>global varaibles to a file and a function that compares >>>>the content of this file with the content of another >>>>file that is supposed to be the same. >>>> >>>>Is there a simple way to do it or do I need for every global array that I have >>>>to write a loop and for every varaible to write a special command. >>>> >>>>I prefer if there is some general solution(otherwise everytime that I add >>>>a new global varaible or delete a global varaible I also need to change the >>>>function). >>>> >>>>Uri >>> >>>Hi Uri, >>> >>>one solution is to put all globals in one or more structs or classes. >>>Instead of many globals vars and arrays you declare only one or few "global" >>>singletons. Some replacement work - but then you may implement some persistance >>>layer, to read and write it with sizeof(struct) from or to some files. >> >>A lot of variable are big arrays and I do not see how can I avoid a loop. > >if the arrays are inside some struct, fwrite, fread or similar block functions >with size of struct is fine. One call for each read/write. > > >> >>The problem is that I waste too much time on investigating difference that I >>believe that should not happen. >> >>In the last case I tested some change in my move generator that was not supposed >>to change the number of nodes that were generated. >> >>I simply changed the generator of king moves to have 2 functions (one for king >>captures and one for king moves that are not captures). >> >>The order of moves in my move generator can be important for the number of moves >>but in this case I think that it should be not important because captures of the >>king are always assumed to be good captures so they are later should be ordered >>the same even if I do not generate them in the same order. >> >>The problem is that when I analyzed the opening position for almost 30 minutes >>and I found a difference of 2 in the number of nodes. >> >>I wanted to know the reason. >> >>I found after a lot of effort a node that the search became different >> >>node number 213,298,603 and I think that I spend too much time about this >>comparisons(of course I did not check every node and I first told the computer >>to print the line every 1048576 nodes and compared the output and every time I >>divided the interval of the suspected node by 8 or 16 but it is better if I do >>it by a different way) >> >>Uri > >I see. Is it deterministic? >Even on several computers or with switching optimizations off? > >Gerd It is deterministic with 2 computers that I tried. I do not know if it is deterministic without optimizations. testing it without optimization may take hours because the first difference from the opening position happened after almost 30 minutes. Maybe it is better idea to try different positions to see if I can find positions when the difference happen earlier but I was curious to understand the problem in the opening positions and I believe that I already did most of the job to find out the problem. Note that a king capture does not have to be a good capture but movei is supposed to consider it always as a good capture because it is a a legal move generator and still not smart enough to consider threats in the order of moves. Uri
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.