Author: Robert Hyatt
Date: 10:39:08 06/19/03
Go up one level in this thread
On June 19, 2003 at 09:52:16, Bo Persson wrote: >On June 19, 2003 at 08:42:39, martin fierz wrote: > >>i've been wondering about whether my checkers program could benefit from some >>IA-32 features, perhaps some specialist can answer me some questions - i'm using >>MSVC.net: >> >>1) prefetching >>my program spends 10% of it's time on a single line according to AMD >>codeanalyst, the line where it reads an entry from the hashtable. since i could >>theoretically compute the hashtable index long before accessing the hashtable, i >>could prefetch this hashtable data. is there a way to do this in C? i guess not, >>so is there a way to do this in assembly code in MSVC? if yes, does somebody >>have some code for this? is anybody doing this already? > >There are some PREFETCHx instructions, that could be used. MSVC has no idea >about this, but it could be issued as an assembler instruction. > >I use the hash value immediately after it is calculated, so I haven't tried >this. > >> >>2) vectorized computation >>my board representation is 4 unsigned integers, my move representation too. my >>domove operates on these two structures by XORin each of the board integers with >>a move integer. is this vectorized by the compiler, or do i have to do (can i >>do?) this myself somehow? > >The Intel compiler might try this, but for 4 values I guess it wouldn't make >much of a difference. It is already somewhat "vectorized" by the hardware, in >that the processor can execute more than one instruction at a time. The compiler >can choose different registers for the different operations to enable this. >Mostly it does. > >> >>3) vectorized comparison >>i do a lot of pattern matching in my evaluation function with the position (4 >>ints as above). that looks about like this: >> >>if( (board.bm & C1 == C1) && (board.wm & C2 == C2) && (board.bk & C3 == C3)) >> do something >> >>is there a way to use MMX registers to compare larger numbers (eg 128bit) with >>one instruction? if yes, how can i do this? > >One problem is that MMX instructions do not set the status flags, but produce a >set of boolean values that must again be tested. If you can't keep the values in >MMX registers, there is also a cost for loading and storing the values. Wasn't this improved in the PIV? IE the old idea of doing a compare in the FPU, then saving the status and moving it to a register to test in the integer unit was gross, but I thought the PIV cleaned this up? > >In my experience, the bitmapping sequences in a chess program is too short to >benefit from MMX. It is of more use for video processing or audio compression. > > >> >>cheers >> martin > > >Bo Persson >bop2@telia.com
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.