Computer Chess Club Archives


Search

Terms

Messages

Subject: HAS_64BITS Re:Not A Blast Re: Where are 64 bits machine?

Author: Brian Richardson

Date: 06:36:21 03/19/03

Go up one level in this thread


I think not, but Bob (or Eugene) can certainly correct me.  It looks like
"HAS_64BITS" is only used to establish the BITBOARD type in chess.h, as in:

#if defined(HAS_64BITS)
  typedef unsigned long BITBOARD;
#else
#  if defined(NT_i386) || defined(NT_AXP)
    typedef unsigned __int64 BITBOARD;
#  else
    typedef unsigned long long BITBOARD;
#  endif
#endif

There could be a couple of other primitives included like an intrinsic popcnt
function for the IA-64 instruction set, but I doubt that it would make all that
much difference.


On March 18, 2003 at 23:26:15, Matthew Hull wrote:

>On March 18, 2003 at 22:47:12, Brian Richardson wrote:
>
>>On March 18, 2003 at 20:27:12, Matthew Hull wrote:
>>
>>>On March 18, 2003 at 18:14:02, Brian Richardson wrote:
>>>
>>>>On March 18, 2003 at 18:09:52, Robert Hyatt wrote:
>>>>
>>>>>On March 18, 2003 at 17:47:49, Tom Kerrigan wrote:
>>>>>
>>>>>>On March 18, 2003 at 16:57:17, Brian Richardson wrote:
>>>>>>
>>>>>>>I have a dual Itanium2 1GHz system.  Perhaps you forgot my earlier post.
>>>>>>>With the optimizing compilers (tried both Intel and Microsoft), it runs
>>>>>>>Tinker at about 2GHz Pentium speed (x86 binary code at only 30%).
>>>>>>>
>>>>>>>Has anyone been able to reproduce your (Eugene's?) results showing MUCH faster
>>>>>>>Itanium2 performance?
>>>>>>
>>>>>>*sigh* Like I've always said, Crafty is not your typical chess program.
>>>>>>
>>>>>>-Tom
>>>>>
>>>>>
>>>>>There we agree.  Itanium is all about moving data around in large quantities.
>>>>>32 bit programs won't necessarily benefit at all, and may well be a lot slower
>>>>>in fact...
>>>>>
>>>>>However, this is also true of many other machines.  Many folks drop their
>>>>>favorite
>>>>>program on a Cray expecting blinding performance and don't get it, because they
>>>>>can't
>>>>>use the vector hardware.
>>>>
>>>>Of course, I ran both Crafty and Tinker (also bitboard based).
>>>>The results were the same.  I even tried a small hash table size
>>>>to fit all of Tinker in the 3MB cache...it sped things up about 10%,
>>>>but still way below fast 32bit Intel and AMD CPUs.
>>>
>>>
>>>Did you tweak the "defines" in Makefile and chess.h and utility.c?  You must
>>>tell the code that the machine can do real 64 bits, not just longlong.
>>>
>>>Matt
>>
>>No, I think that should be up to the compiler.
>>"__int64" is "real" 64 bits.  How it is implemented is up to the compiler.
>
>
>Somewhere you must define "HAS_64BITS".  Otherwise the 32 bit workarounds get
>included instead of the 64 bit stuff.
>
>If you look at the Alpha target in Makefile (Alpha is a true 64 bit machine), it
>sets "target=ALPHA".  Then in chess.h you find the following:
>
>#if defined(ALPHA)
>#  define HAS_64BITS           /* machine has 64-bit integers / operators     */
>#  undef  HAS_LONGLONG         /* machine has 32-bit/64-bit integers          */
>#  define UNIX                 /* system is unix-based                        */
>#endif
>
>The Makefile sets all this up with specific targets.  There is no target in
>Makefile for Itanium.  You could start by cloning the "Generic" target in and
>adding a "target=ITANIUM" to that section.  Make sure the Itanium target
>directive is inserted _before_ the generic target.  It might look like this:
>
>[I'm assuming linux, but you can make it whatever you  want]
>
>linux-itanium:
>        $(MAKE) target=ITANIUM \
>                CC=gcc CXX=g++ \
>                CXFLAGS=$(CFLAGS) \
>                LDFLAGS=$(LDFLAGS) \
>                crafty-make
>
>Then you would need to modify chess.h to include the following
>
>#if defined(ITANIUM)
>#  define HAS_64BITS           /* machine has 64-bit integers / operators     */
>#  undef  HAS_LONGLONG         /* machine has 32-bit/64-bit integers          */
>#  define UNIX                 /* system is unix-based                        */
>#endif
>
>Assuming of course that it's Linux (define UNIX).
>
>Also some logic in utility.c probably needs to be changed.  There is a section
>that looks like this:
>
>#  if !defined(LINUX) && !defined(ALPHA) && !defined(HP) && !defined(CRAY1) && !
>defined(FreeBSD) && !defined(NetBSD) && !defined(__EMX__)
>
>You would tack on the ITANIUM check so it would look like this:
>
>#  if !defined(LINUX) && !defined(ALPHA) && !defined(HP) && !defined(CRAY1) && !
>defined(FreeBSD) && !defined(NetBSD) && !defined(__EMX__) && !defined(ITANIUM)
>
>This prevents some bogus includes that would break the compile under Linux.
>
>Now you are ready for a bargain basement compile.
>
>make linux-itanium
>
>If that works, then run "bench".
>
>Next try adding some of the optimizations that the other targets use like
>-DCOMPACT_ATTACKS or CFLAGS like -O2, etc. and run bench again.
>
>
>The bottom line is that HAS_64BITS needs to be defined, otherwise the
>made-for-32-bit-machine code segements will get compiled instead of the 64 bit
>ones.
>
>Hope that helps,
>Matt



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.