Author: Uri Blass
Date: 08:39:16 02/19/03
Go up one level in this thread
On February 19, 2003 at 10:45:27, Dezhi Zhao wrote: >On February 19, 2003 at 09:57:13, Uri Blass wrote: > >>On February 19, 2003 at 09:41:35, Dezhi Zhao wrote: >> >>>On February 19, 2003 at 06:39:49, Uri Blass wrote: >>> >>>>I try to do movei faster and there are things that are supposed to do it >>>>slightly faster but for some reasons do it slower so I deleted them(Maybe it is >>>>better if I ignore it because it is a compiler optimization noise but I do not >>>>like to see the program slower even if it is only 0.1% slower). >>>> >>>>Note that I do not use now compiler optimization except optimize for speed with >>>>visual C++6. >>>> >>>> >>>>Here is an example: >>>>My function of adding pawn moves to the stack of moves get 2 numbers(from,to). >>>> >>>>I found that special functions to generate white moves one square forward,white >>>>moves 2 pawns forward,black pawns one square forward,...helped me to do movei >>>>faster. >>>> >>>>Common sense say that now I do not need 2 numbers in my functions because >>>>I always have to=from-8 in >>>> >>>>Here is my function. >>>>to is always from-8 and the question is if I can take advantage of that fact. >>>> >>>>static void gen_quietblackslowpawns(int from,int to) >>>>{ >>>> gen_t *g; >>>> if (to<=7) >>>> { >>>> gen_promote(from,to); >>>> return; >>>> } >>>> g=&gen_dat[first_move[ply+1]++]; >>>> g->m.b.from=(char)from; >>>> g->m.b.to=(char) to; >>>> g->m.b.promote=0; >>>> g->m.b.bits=16; >>>> #if MODE!=MODE_PERFT >>>> g->score = history[from][to]; >>>> g->index=-10000; >>>> #endif >>>>} >>> >>>I think you can get a little from that fact. It will save a few push and pop >>>operations. >>> >>>By the way, if you really want to optimize this function, you should consider >>>re-designing the b structure so that the move can be saved in a single write >>>operation, instead of 4. >> >>Thanks for the advise but how do I do it >> >>I have the same data structure as tscp here(Note that 90% of my code is >>different than tscp but I copied part of it's data structures). >> >>Here is my b structure >> >>typedef struct >>{ >> char from; >> char to; >> char promote; >> char bits; >>} >>move_bytes; >> >>typedef union >>{ >> move_bytes b; >> int u; >>} >>move; >> >> >>I can think about deleting the b and have something like >>g->m.u=from+(to<<8)+(promote<<16)+bits<<24) but the question in that case is if > >yes. you can go this way. for this function, the last 2 items are simple >constants anyways. > >>it is not going to do accesing the varaibles slower because there are places in >>the code when I use bits and now I will need to use things like u>>24. >> >>I have no idea about the price of these things so I cannot evaluate speed here. >> >>Uri > >Not that complicated if you think it twice. I do know the semantics of bits >thare. However I assume it is a flag. If it is the case, you do not need to do a >shift to make it flat. Consider testing the other way without shift operations: >u & (16 << 24) >So you can avoid shift operations in many cases. So you still gain something >here. > >dzhao You are right I see that I already got a small speed improvement of about 0.1% from changing the 4 write operation to one command in some functions g->m.u=(from|(to<<8)|(16<<24)); I still did not delete the b structure. I hope that deleting the b structure and working with u can do my code faster. Uri
This page took 0.01 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.