Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: speed question

Author: Uri Blass

Date: 06:57:13 02/19/03

Go up one level in this thread


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
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



This page took 0.02 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.