Computer Chess Club Archives


Search

Terms

Messages

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

Author: Ed Schröder

Date: 11:56:40 12/05/01

Go up one level in this thread


On December 05, 2001 at 14:29:18, Miguel A. Ballicora wrote:

>On December 05, 2001 at 13:36:21, Ed Schröder wrote:
>
>>On December 05, 2001 at 13:04:49, Miguel A. Ballicora wrote:
>>
>>>On December 05, 2001 at 12:42:07, Ed Schröder wrote:
>>>
>>>>On December 05, 2001 at 06:46:07, Severi Salminen wrote:
>>>>
>>>>>>>#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];
>>>>>>>
>>>>>>
>>>>>>Perhaps the data types could be a reason for some microscopic effects. If the
>>>>>>variable "side" is for instance of type "short", the compiler has to zero-extend
>>>>>>the variable to word-size before indexing (because of the array access).
>>>>>
>>>>>But as you can see the variables are all ints. So no type conversions needed. I
>>>>>believe there is just some stupid alignment thing happening or something and
>>>>>that's why the program slows down a bit. I'd use side instead of color(sq) and
>>>>>hopefully the speedup will show up later.
>>>>>
>>>>>Severi
>>>>
>>>>
>>>>You could try to decrease the
>>>>
>>>>int direction[64][64];
>>>>
>>>>by one, thus:
>>>>
>>>>int direction[63][64];
>>>>
>>>>The result might be the compiler doesn't have to do an expensive multiply
>>>>(*65) but is able to do a simple shift-left bits instruction (SHL 6) which
>>>>shift left the bytes 6 times, thus a multiply by 64.
>>>
>>>I do not understand. Why would a compiler want to multiply by 65 in the first
>>>place? Isn't 64 in both cases as determined by the second index?
>>
>>char xxx[0] defines 1 byte.
>>char xxx[10] defines 11 bytes.
>
>That migh be true in other languages (BASIC, Pascal) but it is certainly not
>true in ANSI C (which is the language that Uri was using) and I doubt that is
>true in any dialect of C since it is part of the core of C.
>In fact, C programmers are sometimes proud that
>char x[10]
>initializes 10 bytes (from index 0 to 9).

You make me doubt, I will have to check my compilers documentation.

Ed



>see
>http://www.eskimo.com/~scs/C-faq/q6.2.html
>
>Regards,
>Miguel
>
>
>
>>
>>etc.
>>
>>Ed
>>
>>
>>
>>>Regards,
>>>Miguel
>>>
>>>
>>>
>>>
>>>>
>>>>Ed



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.