Author: Gerd Isenberg
Date: 23:19:16 09/15/02
Go up one level in this thread
My current attack routines (member of CNode) have only one int parameter. So i have to use some conditional compiled inlines: __forceinline BitBoard CNode::GetRookAttacks(int sq) { return getRookAttacksMMX( freeSquares(), 0x0...0001<<sq);} I fear, when i only replace all my sliding Lookup-getters GetFileAttacks, GetA1H8Attacks... in this way, the flood fill mmx aproach will lose. The mmx-execution latencies are mostly two cycles, rather then the one cycle for similar instructions with standard registers (and there are three pipes for standard int instructions). Also most sliding attack getter (exclude getQueenAttacks) are forced inliners. Inlining asm-funtions have the drawback of parameter passing via stack (maybe solvable by passing the parameters already in mmx-register). But i will try it and report about it, as proposed. Have to think about doing a lot of conditional compiles or starting a new test project. It will gain from the lack of incremental updating the three rotated occupied bitboards, but i think it's necessary to change programs infrastructure somehow to gain more from the simultanious feature. One possible improvement for the single square getters could be the use of four routine variations with less fill iterations (4..7). Two function pointer arrays indexed by square index, with respect of the maximal lenght of a ray in each direction for straights or diagonals. An interesting feature of this routines may be looking for all squares attackable after all possible moves by the sliders. You only need two consecutive calls. Cheers, Gerd
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.