Author: Eugene Nalimov
Date: 09:04:43 03/18/05
Go up one level in this thread
On March 18, 2005 at 10:39:46, Matthew Hull wrote:
>On March 17, 2005 at 22:30:25, Dann Corbit wrote:
>
>>On March 17, 2005 at 22:26:20, Dann Corbit wrote:
>>
>>>On March 17, 2005 at 21:40:38, Robert Hyatt wrote:
>>>
>>>>On March 17, 2005 at 21:16:36, Dann Corbit wrote:
>>>>
>>>>>On March 17, 2005 at 17:07:15, Robert Hyatt wrote:
>>>>>
>>>>>>On March 17, 2005 at 14:47:24, Matthew Hull wrote:
>>>>>>
>>>>>>>I have two vanilla builds of GNUChess 5.07. One is in CYGWIN, the other in
>>>>>>>Linux. Both are on x86 architecture. But each allocates hash memory in
>>>>>>>different volumes.
>>>>>>>
>>>>>>>Example command:
>>>>>>>
>>>>>>>./gnuchess -s 10000000
>>>>>>>
>>>>>>>On Cygwin, this allocates 393216K of hash memory.
>>>>>>>
>>>>>>>On Linux, it allocates 327680K
>>>>>>>
>>>>>>>What is the reason for this?
>>>>>>
>>>>>>Several possibilities. But first, have you started both programs without the -s
>>>>>>option to see how big they are, then restarted both with the -s to see the
>>>>>>difference?
>>>>>
>>>>>Some other likely differences:
>>>>>
>>>>>1. structure packing (since the hash table seems to be an 'entries' count if
>>>>>the struct is aligned differently it will not be at all surprising if the same
>>>>>count of structs has different sizes on two machines.
>>>>>
>>>>>2. memory page sizes are different (small differences will be explained this
>>>>>way)
>>>>
>>>>On the PC the pagesize is 4K period. Unless you use the huge page-size which
>>>>most operating systems do not use (4mb for intel, I think AMD opteron supports a
>>>>2M page size as well).
>>>>
>>>>I can't imagine anyone with a hash entry size that is not a multiple of 4/8,
>>>>which would eliminate the packing issue on the X86 box...
>>>
>>>E:\pgn\WINBOA~1\GNUCHE~1.07\src>type foo.c
>>>#include <stdio.h>
>>>#include <stdlib.h>
>>>#include <string.h>
>>>#include "common.h"
>>>int main(void)
>>>{
>>> HashSlot hs;
>>> printf("sizeof HashSlot = %u\n", (unsigned) sizeof hs);
>>> return 0;
>>>}
>>>
>>>E:\pgn\WINBOA~1\GNUCHE~1.07\src>cl /Zp8 foo.c
>>>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
>>>Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
>>>
>>>foo.c
>>>Microsoft (R) Incremental Linker Version 7.10.3077
>>>Copyright (C) Microsoft Corporation. All rights reserved.
>>>
>>>/out:foo.exe
>>>foo.obj
>>>
>>>E:\pgn\WINBOA~1\GNUCHE~1.07\src>foo
>>>sizeof HashSlot = 24
>>>
>>>E:\pgn\WINBOA~1\GNUCHE~1.07\src>cl /Zp4 foo.c
>>>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
>>>Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
>>>
>>>foo.c
>>>Microsoft (R) Incremental Linker Version 7.10.3077
>>>Copyright (C) Microsoft Corporation. All rights reserved.
>>>
>>>/out:foo.exe
>>>foo.obj
>>>
>>>E:\pgn\WINBOA~1\GNUCHE~1.07\src>foo
>>>sizeof HashSlot = 20
>>
>>393216/327680 = 1.2
>>24/20=1.2
>
>I don't understand what the "/Zp4" and "/Zp8" are controlling.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_.2f.zp.asp
Thanks,
Eugene
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.