Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: another question of speed

Author: Robert Hyatt

Date: 16:18:10 11/16/00

Go up one level in this thread


On November 16, 2000 at 12:21:24, martin fierz wrote:

>On November 16, 2000 at 10:33:48, Robert Hyatt wrote:
>
>>On November 16, 2000 at 05:38:02, martin fierz wrote:
>>
>>>hi,
>>>
>>>i recently moved from borland C 5.5 to visual C 6.0 professional which resulted
>>>in a 10% speed increase in my checkers program - this helps answer a question i
>>>asked recently about 'best compilers'.
>>>
>>>i have another question about speed: i'm using large arrays for different
>>>things, hash-xoring, bit-counting, some arrays in the evaluation etc. i noticed
>>>that the final speed of my program depends on how i declare them - but the
>>>behavior seems rather erratic. does anybody know if there should be a difference
>>>between declaring globals like this:
>>>
>>>int large_array[BIG_NUMBER];
>>>
>>>or
>>>
>>>int *large_array;
>>>
>>>followed by a malloc in the initialization?
>>
>>They are equivalent, actually, since C doesn't really have an "array" data
>>type.  One of the things that students have trouble with is that if you use
>>the pointer declaration form above, you can do this:
>>
>>*(large_array+i)=0;
>>large_array[i]=0;
>>
>>even though the large_array declaration is not an array...  because arrays
>>are implemented in C via pointers.
>
>i know that the two methods are equivalent in principle, but it's a fact that
>the execution speed of my program changes (not much, i admit) if i change this
>statement. there is the difference pointed out by james:
>
>>I _think_ the only difference there is where it's stored in memory.
>>The first case (with the array) would be allocated down with
>>the rest of your globals, and the malloc would go on the heap, of course.
>
>and somehow this seems to affect the execution speed, but in a rather random way
>- i was just wondering if there was some general idea around, like 'always use
>pointers' or 'always use arrays' because that might tend to get data closer
>together in the memory and could somehow affect the way the cache is working.
>it's the only explanation i have and it does not give me any clue on what do do
>:-(
>
>-martin

It isn't pointers vs arrays.  It is local data vs global data.  Global is
generally faster.  To access a global array, you just do name+i, where i is
the element you want.  For a local array it is going to be register+name+i,
which hurts.  If you are short on registers at that point, a register spill
happens, and you can definitely feel that on a profile run.  You only have 8
registers to start with.  You run out quickly.  Unless you go to some other
architecture (like a SPARC) which gives you 32 registers (or even more on other
machines)



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.