Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: a question about speed difference that I do not understand

Author: Miguel A. Ballicora

Date: 08:53:28 12/05/01

Go up one level in this thread


On December 05, 2001 at 05:33:08, Uri Blass wrote:

>In my program I have the following commands when I generate my pin arrays:
>
>if (color(sq)==side)
>{
>   pin[sq]=-1;
>   d=direction[kingsquare[color(sq)]][sq];
>...
>
>The strange speed demage to my program happens when I try to replace color(sq)
>with side in the last line
>
>color(sq) is more complicated to find  then finding side that is simply integer.
>I expected that in the worst case there will be no speed change thanks to
>optimazion of compiler but I did not imagine that my program could run slower
>when I do something simpler.
>
>some data about my program that may help:
>
>
>
>my defs.h file includes
>
>#define color(target) (((info[target])>>3)&3)
>
>
>my data.c file includes
>
>int info[64];
>int side;
>int direction[64][64];
>int kingsquare[2];
>int pin[64];
>
>you can see that calculating color(sq) is not something simple(you need first to
>calculate info[sq] and later to calculate from it the value for color(sq))
>
>Uri

If I have to bet, I'll say you have a cache problem. Generally, there is a huge
penalty for accessing (consecutively) two variables that are close to 8192 bytes
apart (the size of cache). IIRC I've read that reading variables that are close
to 4096 bytes apart might also give a little penalty (I do not remember now
why). As general rule, jumping 2^n bytes is not good and there are some
n that are worse.
You access side and kingsquare that are roughly 4096 bytes apart.
Test it with this definitions, putting together side and kingsquare so they
will be in the same cache line (32 bytes).

int info[64];
int side;
int kingsquare[2];
int direction[64][64];
int pin[64];

I would also try:

int direction[64][64];
int pin[64];
int info[64];
int kingsquare[2];
int side;

side, kingsquare and info are accessed consecutively, so put them together.
Alignment can have an effect too.

Let us know what happen, I am curious.

Anyway, I do not think you have to worry about this now with your program.

Regards,
Miguel



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.