Author: Robert Hyatt
Date: 11:53:23 09/03/03
I finally found time to run a few tests. First, the set-up: I took all my bitmap stuff, added it up, and put it in a structure that was then set up as an array. IE tdata[128] was an array of these structures, each element being just enough bytes to hold all of what I call a "position" including bitmap boards, hash signature, 50 move counter, etc...) At the top of MakeMove() I added tdata[ply+1]=tdata[ply]; to do the copy stuff. That's all. Some results: fine 70 searched to 39 plies deep: copy/make : 15.5 seconds, make/unmake 14.0 seconds (11% overhead) kopec 22 searched to 12 plies deep: copy/make : 32.4 seconds, make/unmake 28.3 seconds. (14.5% overhead) mate position searched 9 plies deep (mate in 10) copy/make : 8.9 seconds, make/unmake 7.5 seconds. (18.7% overhead) That's not all the story. however. The copy/make approach requires an extra register everywhere since the data structures have to be accessed through a pointer (or via an array subscript, same thing). My test case does not take care of that. But if you were to mark one register as "unusable" for the compiler, the result would be worse, for certain. Since these data values are accessed all over the place, a register has to be used everywhere, which is going to add to the above, significantly. If it only adds 10% then the above numbers are back to what I originally saw when I speeded things up by 25% by getting rid of copy/make. That's data for Crafty. YMMV of course...
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.