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.