Splitted MAGICS

Discussion of chess software programming and technical issues.

Moderator: Ras

User avatar
Desperado
Posts: 879
Joined: Mon Dec 15, 2008 11:45 am

Splitted MAGICS

Post by Desperado »

Hi everyone!

PLS correct me if i misunderstood sth.

LITLLE SUMMARY MAGIC-MGEN (just for me :-) ):
==============================================

main advantages:

- simultaneously generating 4 directions
- quick access to precomputed tables containing the moves(attacksets),
by using hashfunction like "(MAGIC * OCC)>>(64-bts)"

main disadvantage:

- great lookup-tables (especially for rooks).

IDEA:
=========

Like it is usual in other bitboard approaches to split the directions for movegeneration,
it also can be done in the "magic-approach".

Of course the gain of simultaneously generating all directions will be lost.
But on the other hand the magic tables would shrink enormous.

(i think in comparison to other bitboard-move-generation schemes, eg. rotated bitboards,
there may be also saved a lot of work.(here for instance rotating the bb. i hope you
know what i mean. i am not experienced in the most other bb-schemes.)

At the end, one could make the compromise, not to split all directions.

example: create magics for R(NN and SS),B(NW and SE), or any other combination.

a magic-shift-set for the 2 examples can look like this...

========
=....h8=
=a1....=
========

F(): (MAGIC*OCC)>>(64-BTS)

FOLLOWING (SOME) "BTS"-Numbers

ROOK: NN and SS

6 6 6 6 6 6 6 6
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 ENTRIES: 2560 SIZE: 20480 byte

BISHOP: NW and SE

6 4 4 3 2 1 1 1
5 5 4 3 2 1 1 1
4 4 5 4 3 2 1 1
3 3 4 5 4 3 2 2
2 2 3 4 6 4 3 3
1 1 2 3 4 5 3 4
1 1 1 2 3 4 4 4
1 1 1 2 3 4 4 5 ENTRIES: 768 SIZE: 6144 byte

OR SINGLE SPLITTED...

ROOK: NN only

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5
7 6 6 6 6 6 6 6 ENTRIES: 1106 SIZE: 8848 byte

BISHOP: SW only

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 2 2 2 2 2
1 1 1 2 3 3 3 3
1 1 1 2 3 4 4 4
1 1 1 2 3 4 5 5
1 1 1 2 3 4 4 6 ENTRIES: 394 SIZE: 3152 byte


So what do you think? does it make sense to split the magics, to get the small tables
or will there be a dramatic speed lost due to generate the "splitted" directions?

Also i would be interested in the dimension of how the uncompressed magic-tables influence the speed. (i used magic-bb until now only with absolut uncompressed tables 4096,512(r,b) index). But anyway it seemed they are working very fast...
mcostalba
Posts: 2684
Joined: Sat Jun 14, 2008 9:17 pm

Re: Splitted MAGICS

Post by mcostalba »

Desperado wrote: IDEA:
=========
Have you experimented with this? Have you numbers to show?

Thanks in advance
Marco
zamar
Posts: 613
Joined: Sun Jan 18, 2009 7:03 am

Re: Splitted MAGICS

Post by zamar »

I have very recently experienced with this kind of idea. To be precise I wrote a magic move generator for non-capturing slider moves using move database calculated at program startup. And to make everything fit in cache memory I had to use exactly the kind of splitting technique you described in your post.

However early tests suggested that the speed difference between my own implementation and Stockfish's/Glaurung's current implementation is very small (if at all), so it's definetily not worth of 300-400 lines of new code :)
Joona Kiiski
User avatar
Desperado
Posts: 879
Joined: Mon Dec 15, 2008 11:45 am

Re: Splitted MAGICS

Post by Desperado »

yes, i am testing at the moment.

i will validate the magics til tomorrow, normally there shouldnt
be a problem, because the same stuff as for normal magics.

more details tomorrow, unfortunalety i have no time at the moment.
(one thing for now... (occ*mgc)>>(64-n) : occupancy is the same
occupancy as for a unsplitted key generation), but ...ahhhhhhhhh i have to go (hmfrg...)

til tomorrow...(maybe tonight)
Aleks Peshkov
Posts: 923
Joined: Sun Nov 19, 2006 9:16 pm
Location: Russia
Full name: Aleks Peshkov

Re: Splitted MAGICS

Post by Aleks Peshkov »

Do you have look for existing methods described in http://chessprogramming.wikispaces.com/?
User avatar
Desperado
Posts: 879
Joined: Mon Dec 15, 2008 11:45 am

Re: Splitted MAGICS

Post by Desperado »

ok here are the first numbers (not optimal of course yet).

I decided to split the directions in

rook (nn-ss)
rook (ww-ee)
bishop(nw-se)
bishop(ne-sw)

the occupancy bits for the magicfunction are the "inner6-masked" + "square" itself.

squarecode: a1=0...h8=63

Code: Select all


ROOK: NN & SS

SQUARE a1 -> SHIFT:  6 MNMB: 0x4408010282090 
SQUARE b1 -> SHIFT:  6 MNMB: 0x4002502804604000 
SQUARE c1 -> SHIFT:  6 MNMB: 0x1600410022800 
SQUARE d1 -> SHIFT:  6 MNMB: 0x204081B1000A0 
SQUARE e1 -> SHIFT:  6 MNMB: 0x2080100441480 
SQUARE f1 -> SHIFT:  6 MNMB: 0x204A03040080 
SQUARE g1 -> SHIFT:  6 MNMB: 0x201200890040 
SQUARE h1 -> SHIFT:  6 MNMB: 0x401810210080 
SQUARE a2 -> SHIFT:  5 MNMB: 0x81040822000 
SQUARE b2 -> SHIFT:  5 MNMB: 0x80083020410C68 
SQUARE c2 -> SHIFT:  5 MNMB: 0x100020810156005 
SQUARE d2 -> SHIFT:  5 MNMB: 0x34000842010C1000 
SQUARE e2 -> SHIFT:  5 MNMB: 0x280000A801040240 
SQUARE f2 -> SHIFT:  5 MNMB: 0x2000006100820C04 
SQUARE g2 -> SHIFT:  5 MNMB: 0x4080048947002600 
SQUARE h2 -> SHIFT:  5 MNMB: 0x3800004020821100 
SQUARE a3 -> SHIFT:  5 MNMB: 0x40000910806102 
SQUARE b3 -> SHIFT:  5 MNMB: 0x40000408E01023 
SQUARE c3 -> SHIFT:  5 MNMB: 0x1010000420080200 
SQUARE d3 -> SHIFT:  5 MNMB: 0x610000408014200 
SQUARE e3 -> SHIFT:  5 MNMB: 0x6862000108040080 
SQUARE f3 -> SHIFT:  5 MNMB: 0x404000100520080 
SQUARE g3 -> SHIFT:  5 MNMB: 0x1000140802201 
SQUARE h3 -> SHIFT:  5 MNMB: 0x4250000285041AA 
SQUARE a4 -> SHIFT:  5 MNMB: 0x50200008804040 
SQUARE b4 -> SHIFT:  5 MNMB: 0x20400004085000 
SQUARE c4 -> SHIFT:  5 MNMB: 0x4020100004420820 
SQUARE d4 -> SHIFT:  5 MNMB: 0x41100004280A00 
SQUARE e4 -> SHIFT:  5 MNMB: 0x2801480001820408 
SQUARE f4 -> SHIFT:  5 MNMB: 0x4420006810400 
SQUARE g4 -> SHIFT:  5 MNMB: 0x2801048000620042 
SQUARE h4 -> SHIFT:  5 MNMB: 0x2004190000812240 
SQUARE a5 -> SHIFT:  5 MNMB: 0x408130C000082000 
SQUARE b5 -> SHIFT:  5 MNMB: 0x14402000081004 
SQUARE c5 -> SHIFT:  5 MNMB: 0x2042000085000 
SQUARE d5 -> SHIFT:  5 MNMB: 0x4051042600085000 
SQUARE e5 -> SHIFT:  5 MNMB: 0x4024008200011800 
SQUARE f5 -> SHIFT:  5 MNMB: 0x80D108400004E00 
SQUARE g5 -> SHIFT:  5 MNMB: 0xA0A294600070180 
SQUARE h5 -> SHIFT:  5 MNMB: 0x4418300001720 
SQUARE a6 -> SHIFT:  5 MNMB: 0x380102040000824 
SQUARE b6 -> SHIFT:  5 MNMB: 0x404029A050000400 
SQUARE c6 -> SHIFT:  5 MNMB: 0x660500208000446 
SQUARE d6 -> SHIFT:  5 MNMB: 0x10274814000200 
SQUARE e6 -> SHIFT:  5 MNMB: 0x5C6208410400008C 
SQUARE f6 -> SHIFT:  5 MNMB: 0x90420113800404 
SQUARE g6 -> SHIFT:  5 MNMB: 0x408A024322800104 
SQUARE h6 -> SHIFT:  5 MNMB: 0x2224210070800148 
SQUARE a7 -> SHIFT:  5 MNMB: 0x10800A4010240001 
SQUARE b7 -> SHIFT:  5 MNMB: 0x5E40205048050007 
SQUARE c7 -> SHIFT:  5 MNMB: 0x2114408200000 
SQUARE d7 -> SHIFT:  5 MNMB: 0x3041120830440004 
SQUARE e7 -> SHIFT:  5 MNMB: 0x104051842820000 
SQUARE f7 -> SHIFT:  5 MNMB: 0x221408A842090000 
SQUARE g7 -> SHIFT:  5 MNMB: 0x800420030810000 
SQUARE h7 -> SHIFT:  5 MNMB: 0x2056D8011410000 
SQUARE a8 -> SHIFT:  6 MNMB: 0x1070148168204000 
SQUARE b8 -> SHIFT:  6 MNMB: 0x40A1060084000 
SQUARE c8 -> SHIFT:  6 MNMB: 0x6CD0152004BA0780 
SQUARE d8 -> SHIFT:  6 MNMB: 0x534800821F304400 
SQUARE e8 -> SHIFT:  6 MNMB: 0x50004203080C0180 
SQUARE f8 -> SHIFT:  6 MNMB: 0x200208102015400 
SQUARE g8 -> SHIFT:  6 MNMB: 0x1249002250420080 
SQUARE h8 -> SHIFT:  6 MNMB: 0x100171000A402080 

(ENTRIES: 2560 SIZE: 20480)

BISHOP: NW & SE

SQUARE a1 -> SHIFT:  1 MNMB: 0x200006A118A81B80 
SQUARE b1 -> SHIFT:  1 MNMB: 0x2E2A712A5E050A53 
SQUARE c1 -> SHIFT:  1 MNMB: 0x8C0030000000240 
SQUARE d1 -> SHIFT:  2 MNMB: 0x20200020040800 
SQUARE e1 -> SHIFT:  3 MNMB: 0x2008203000401A00 
SQUARE f1 -> SHIFT:  4 MNMB: 0x79B402B740A0417C 
SQUARE g1 -> SHIFT:  5 MNMB: 0x6119140420080180 
SQUARE h1 -> SHIFT:  6 MNMB: 0x182005E0A062019 
SQUARE a2 -> SHIFT:  1 MNMB: 0x7F990FAB11D369B1 
SQUARE b2 -> SHIFT:  1 MNMB: 0x1E8943B35228269F 
SQUARE c2 -> SHIFT:  1 MNMB: 0x2168410050000F59 
SQUARE d2 -> SHIFT:  2 MNMB: 0x800602000240030 
SQUARE e2 -> SHIFT:  3 MNMB: 0x3048682840840056 
SQUARE f2 -> SHIFT:  4 MNMB: 0x1291640C20054012 
SQUARE g2 -> SHIFT:  5 MNMB: 0x4AE201DA3AAB7E76 
SQUARE h2 -> SHIFT:  5 MNMB: 0x4002010101056000 
SQUARE a3 -> SHIFT:  1 MNMB: 0x2040000806000080 
SQUARE b3 -> SHIFT:  1 MNMB: 0x3200404480000A 
SQUARE c3 -> SHIFT:  2 MNMB: 0x89134001400404 
SQUARE d3 -> SHIFT:  3 MNMB: 0x48C2085040102188 
SQUARE e3 -> SHIFT:  4 MNMB: 0x1020820080100 
SQUARE f3 -> SHIFT:  5 MNMB: 0x2400106802103004 
SQUARE g3 -> SHIFT:  4 MNMB: 0x300020051B103000 
SQUARE h3 -> SHIFT:  4 MNMB: 0x180020101C21040 
SQUARE a4 -> SHIFT:  2 MNMB: 0x410400800400008 
SQUARE b4 -> SHIFT:  2 MNMB: 0x32140002200000 
SQUARE c4 -> SHIFT:  3 MNMB: 0x88040420002000 
SQUARE d4 -> SHIFT:  4 MNMB: 0x1010020200000 
SQUARE e4 -> SHIFT:  7 MNMB: 0xA01010050040080 
SQUARE f4 -> SHIFT:  4 MNMB: 0x8004102420 
SQUARE g4 -> SHIFT:  3 MNMB: 0x1220000042885200 
SQUARE h4 -> SHIFT:  3 MNMB: 0x81000148A0893 
SQUARE a5 -> SHIFT:  3 MNMB: 0x4210145008000004 
SQUARE b5 -> SHIFT:  3 MNMB: 0x208404A101000206 
SQUARE c5 -> SHIFT:  4 MNMB: 0x440A0200200000 
SQUARE d5 -> SHIFT:  5 MNMB: 0x1004100201000 
SQUARE e5 -> SHIFT:  4 MNMB: 0x4100082000 
SQUARE f5 -> SHIFT:  3 MNMB: 0x4900400040880881 
SQUARE g5 -> SHIFT:  2 MNMB: 0x401000018040400 
SQUARE h5 -> SHIFT:  2 MNMB: 0x1B602FBC0EA6769D 
SQUARE a6 -> SHIFT:  4 MNMB: 0x28064820500280 
SQUARE b6 -> SHIFT:  4 MNMB: 0x3045082270A00000 
SQUARE c6 -> SHIFT:  5 MNMB: 0x210802002000 
SQUARE d6 -> SHIFT:  4 MNMB: 0x10101082002 
SQUARE e6 -> SHIFT:  3 MNMB: 0x604000101001009 
SQUARE f6 -> SHIFT:  2 MNMB: 0x1400000001000810 
SQUARE g6 -> SHIFT:  1 MNMB: 0x10000000201400 
SQUARE h6 -> SHIFT:  1 MNMB: 0x921114010025202 
SQUARE a7 -> SHIFT:  5 MNMB: 0x180110882FD1 
SQUARE b7 -> SHIFT:  5 MNMB: 0x82200640218208C 
SQUARE c7 -> SHIFT:  4 MNMB: 0x8C106061202000B 
SQUARE d7 -> SHIFT:  3 MNMB: 0x410020A202820824 
SQUARE e7 -> SHIFT:  2 MNMB: 0x21000002020000 
SQUARE f7 -> SHIFT:  1 MNMB: 0x800020342014D 
SQUARE g7 -> SHIFT:  1 MNMB: 0x70402470851048 
SQUARE h7 -> SHIFT:  1 MNMB: 0x2000000 
SQUARE a8 -> SHIFT:  6 MNMB: 0x6003028200864080 
SQUARE b8 -> SHIFT:  5 MNMB: 0x69786BFF1B926A94 
SQUARE c8 -> SHIFT:  4 MNMB: 0x944040440 
SQUARE d8 -> SHIFT:  3 MNMB: 0x2040280202010440 
SQUARE e8 -> SHIFT:  2 MNMB: 0x1030020201420200 
SQUARE f8 -> SHIFT:  1 MNMB: 0x200000000211202 
SQUARE g8 -> SHIFT:  1 MNMB: 0x620248000020100 
SQUARE h8 -> SHIFT:  1 MNMB: 0x1090410001411204 

(ENTRIES: 936 SIZE: 7488)

ROOK: WW & EE

SQUARE a1 -> SHIFT:  6 MNMB: 0x200000000000020 
SQUARE b1 -> SHIFT:  5 MNMB: 0x600000000000000 
SQUARE c1 -> SHIFT:  5 MNMB: 0x600000000000080 
SQUARE d1 -> SHIFT:  5 MNMB: 0xA00400020000000 
SQUARE e1 -> SHIFT:  5 MNMB: 0x1200000000000000 
SQUARE f1 -> SHIFT:  5 MNMB: 0x2200100000000000 
SQUARE g1 -> SHIFT:  5 MNMB: 0x400000404000000 
SQUARE h1 -> SHIFT:  6 MNMB: 0x200000000000000 
SQUARE a2 -> SHIFT:  6 MNMB: 0x22000000000040 
SQUARE b2 -> SHIFT:  5 MNMB: 0x1002000000000000 
SQUARE c2 -> SHIFT:  5 MNMB: 0x6000000000020 
SQUARE d2 -> SHIFT:  5 MNMB: 0x200A000000200000 
SQUARE e2 -> SHIFT:  5 MNMB: 0x52000000000000 
SQUARE f2 -> SHIFT:  5 MNMB: 0x8200000000000 
SQUARE g2 -> SHIFT:  5 MNMB: 0x4000000000000 
SQUARE h2 -> SHIFT:  6 MNMB: 0x802000000000000 
SQUARE a3 -> SHIFT:  6 MNMB: 0x220001000004 
SQUARE b3 -> SHIFT:  5 MNMB: 0x108000000020 
SQUARE c3 -> SHIFT:  5 MNMB: 0x80060000000020 
SQUARE d3 -> SHIFT:  5 MNMB: 0xA0000000020 
SQUARE e3 -> SHIFT:  5 MNMB: 0x120000100000 
SQUARE f3 -> SHIFT:  5 MNMB: 0x200081800000008 
SQUARE g3 -> SHIFT:  5 MNMB: 0x40000040001 
SQUARE h3 -> SHIFT:  6 MNMB: 0x20000000004 
SQUARE a4 -> SHIFT:  6 MNMB: 0x200000000 
SQUARE b4 -> SHIFT:  5 MNMB: 0x400001A00800081 
SQUARE c4 -> SHIFT:  5 MNMB: 0x2600000000 
SQUARE d4 -> SHIFT:  5 MNMB: 0xA00000000 
SQUARE e4 -> SHIFT:  5 MNMB: 0x200001200100001 
SQUARE f4 -> SHIFT:  5 MNMB: 0x818080000 
SQUARE g4 -> SHIFT:  5 MNMB: 0x2008000400000400 
SQUARE h4 -> SHIFT:  6 MNMB: 0x200A000600000000 
SQUARE a5 -> SHIFT:  6 MNMB: 0x2000080 
SQUARE b5 -> SHIFT:  5 MNMB: 0x4480000122000000 
SQUARE c5 -> SHIFT:  5 MNMB: 0x41000000 
SQUARE d5 -> SHIFT:  5 MNMB: 0xA002000 
SQUARE e5 -> SHIFT:  5 MNMB: 0x12000020 
SQUARE f5 -> SHIFT:  5 MNMB: 0x100080008180000 
SQUARE g5 -> SHIFT:  5 MNMB: 0x580000004000000 
SQUARE h5 -> SHIFT:  6 MNMB: 0x220000002000200 
SQUARE a6 -> SHIFT:  6 MNMB: 0x60000 
SQUARE b6 -> SHIFT:  5 MNMB: 0x80000000020000 
SQUARE c6 -> SHIFT:  5 MNMB: 0x100000000060002 
SQUARE d6 -> SHIFT:  5 MNMB: 0xA0000 
SQUARE e6 -> SHIFT:  5 MNMB: 0x1000000000120000 
SQUARE f6 -> SHIFT:  5 MNMB: 0x1A0000000081800 
SQUARE g6 -> SHIFT:  5 MNMB: 0x100000040000 
SQUARE h6 -> SHIFT:  6 MNMB: 0x400000400020000 
SQUARE a7 -> SHIFT:  6 MNMB: 0x200000000001040 
SQUARE b7 -> SHIFT:  5 MNMB: 0x10200 
SQUARE c7 -> SHIFT:  5 MNMB: 0x4100 
SQUARE d7 -> SHIFT:  5 MNMB: 0x40004020000A00 
SQUARE e7 -> SHIFT:  5 MNMB: 0x20001200 
SQUARE f7 -> SHIFT:  5 MNMB: 0x2008000000000816 
SQUARE g7 -> SHIFT:  5 MNMB: 0x1000000400 
SQUARE h7 -> SHIFT:  6 MNMB: 0x6000000000000200 
SQUARE a8 -> SHIFT:  6 MNMB: 0x2000000001000002 
SQUARE b8 -> SHIFT:  5 MNMB: 0x42 
SQUARE c8 -> SHIFT:  5 MNMB: 0x4000000000000006 
SQUARE d8 -> SHIFT:  5 MNMB: 0x80000000040002A 
SQUARE e8 -> SHIFT:  5 MNMB: 0x800000000000012 
SQUARE f8 -> SHIFT:  6 MNMB: 0x204000020000000E 
SQUARE g8 -> SHIFT:  5 MNMB: 0x100040800000004 
SQUARE h8 -> SHIFT:  6 MNMB: 0x2 

(ENTRIES: 2592 SIZE: 20736)

BISHOP: NE & SW

SQUARE a1 -> SHIFT:  6 MNMB: 0x2404C3105FA0009 
SQUARE b1 -> SHIFT:  5 MNMB: 0x8210122020004 
SQUARE c1 -> SHIFT:  4 MNMB: 0x110402C602004108 
SQUARE d1 -> SHIFT:  3 MNMB: 0x1002040119000180 
SQUARE e1 -> SHIFT:  2 MNMB: 0x6020100682010 
SQUARE f1 -> SHIFT:  1 MNMB: 0x2004420000000 
SQUARE g1 -> SHIFT:  1 MNMB: 0x84000000000000 
SQUARE h1 -> SHIFT:  1 MNMB: 0x4000224000001 
SQUARE a2 -> SHIFT:  5 MNMB: 0x3D7F329D54CD5813 
SQUARE b2 -> SHIFT:  4 MNMB: 0x47304DA43B8C5BFC 
SQUARE c2 -> SHIFT:  4 MNMB: 0x140044401820010 
SQUARE d2 -> SHIFT:  3 MNMB: 0x1010020602000500 
SQUARE e2 -> SHIFT:  2 MNMB: 0x4048100040000 
SQUARE f2 -> SHIFT:  1 MNMB: 0x24000000004 
SQUARE g2 -> SHIFT:  1 MNMB: 0x4802401304210080 
SQUARE h2 -> SHIFT:  1 MNMB: 0x7C857B8B7A1C71AD 
SQUARE a3 -> SHIFT:  4 MNMB: 0x280203010101730 
SQUARE b3 -> SHIFT:  4 MNMB: 0x5200082823080604 
SQUARE c3 -> SHIFT:  5 MNMB: 0x50C0040224004088 
SQUARE d3 -> SHIFT:  4 MNMB: 0x2CB00402008200C0 
SQUARE e3 -> SHIFT:  3 MNMB: 0x450220101010010 
SQUARE f3 -> SHIFT:  2 MNMB: 0x4120200000000 
SQUARE g3 -> SHIFT:  1 MNMB: 0x214482800400C0A 
SQUARE h3 -> SHIFT:  1 MNMB: 0x120A000101002200 
SQUARE a4 -> SHIFT:  3 MNMB: 0x4500090412105050 
SQUARE b4 -> SHIFT:  3 MNMB: 0x8100400 
SQUARE c4 -> SHIFT:  4 MNMB: 0x4000202002281700 
SQUARE d4 -> SHIFT:  5 MNMB: 0x5408100800810600 
SQUARE e4 -> SHIFT:  4 MNMB: 0x2008100000810080 
SQUARE f4 -> SHIFT:  3 MNMB: 0x10040101800002 
SQUARE g4 -> SHIFT:  2 MNMB: 0x4405240100010008 
SQUARE h4 -> SHIFT:  2 MNMB: 0x2028010000010 
SQUARE a5 -> SHIFT:  2 MNMB: 0x40004080A411000 
SQUARE b5 -> SHIFT:  2 MNMB: 0x4000000050A00418 
SQUARE c5 -> SHIFT:  3 MNMB: 0x48000C001040C00 
SQUARE d5 -> SHIFT:  5 MNMB: 0x800081000080140 
SQUARE e5 -> SHIFT:  6 MNMB: 0x60083000004040 
SQUARE f5 -> SHIFT:  4 MNMB: 0x8180800004002 
SQUARE g5 -> SHIFT:  3 MNMB: 0x12021621000008 
SQUARE h5 -> SHIFT:  3 MNMB: 0x4008018500401808 
SQUARE a6 -> SHIFT:  1 MNMB: 0x18000000A004081 
SQUARE b6 -> SHIFT:  1 MNMB: 0x43D800004000302C 
SQUARE c6 -> SHIFT:  2 MNMB: 0x200000040000803 
SQUARE d6 -> SHIFT:  3 MNMB: 0x282020010200 
SQUARE e6 -> SHIFT:  4 MNMB: 0x1000400808016080 
SQUARE f6 -> SHIFT:  5 MNMB: 0x410241808004024 
SQUARE g6 -> SHIFT:  4 MNMB: 0x108220C04180813 
SQUARE h6 -> SHIFT:  4 MNMB: 0x20D108034B641000 
SQUARE a7 -> SHIFT:  1 MNMB: 0x40163424A200003 
SQUARE b7 -> SHIFT:  1 MNMB: 0x4910030008160A24 
SQUARE c7 -> SHIFT:  1 MNMB: 0x20400400104A0401 
SQUARE d7 -> SHIFT:  2 MNMB: 0x40400040100040 
SQUARE e7 -> SHIFT:  3 MNMB: 0x40A082028500410 
SQUARE f7 -> SHIFT:  4 MNMB: 0x1008062005040024 
SQUARE g7 -> SHIFT:  5 MNMB: 0x20201A0212041001 
SQUARE h7 -> SHIFT:  5 MNMB: 0x1620480A18B14624 
SQUARE a8 -> SHIFT:  1 MNMB: 0x3600000000110048 
SQUARE b8 -> SHIFT:  1 MNMB: 0x2220010000000 
SQUARE c8 -> SHIFT:  1 MNMB: 0x101000000804400 
SQUARE d8 -> SHIFT:  2 MNMB: 0x1601407304A02008 
SQUARE e8 -> SHIFT:  3 MNMB: 0x204300042048301C 
SQUARE f8 -> SHIFT:  4 MNMB: 0x5040400848500404 
SQUARE g8 -> SHIFT:  4 MNMB: 0x3F2B7FF5297808BB 
SQUARE h8 -> SHIFT:  6 MNMB: 0x204200403002900 

(ENTRIES: 856 SIZE: 6848)

with these numbers full movegenration is possible. Some magics are not optimal (but for now enough i think)...
User avatar
Desperado
Posts: 879
Joined: Mon Dec 15, 2008 11:45 am

Re: Splitted MAGICS

Post by Desperado »

hi aleks, yes i did :-)
Aleks Peshkov
Posts: 923
Joined: Sun Nov 19, 2006 9:16 pm
Location: Russia
Full name: Aleks Peshkov

Re: Splitted MAGICS

Post by Aleks Peshkov »

Kindergarten method needs only 1 magic hash constant per direction (NW, NE, NS, EW).

Code: Select all

   occ = (directionMask[sq] & occ) * 0x0202020202020202uLL >> 58;
   return directionMask[sq] & fillUpAttacks[sq&7][occ]; //4.5k tables version (4k are shared between 3 directions)
   return directionAttacks[sq][occ]; //32.5k tables version
User avatar
Desperado
Posts: 879
Joined: Mon Dec 15, 2008 11:45 am

Re: Splitted MAGICS

Post by Desperado »

hm, i have to think about this, but my first impression is this:

if i undestand right you have:

4xdirectionmask[sq] * 64 squares + 1xmconst = 4*64 + 1= 257

numbers ?! correct?

while if i look above , i would have

1xalldirectionmask[sq] * 64 squares + 64 * 2xm_direction_const = 64 + 64*2 = 192 numbers ?! correct?

ok, i think on, especially about the tablesize...

(and not to forget about all optimizations, that can be done for magictables, can be done here in the absolut same way. (whatever the opt. look like :-) ))
User avatar
Desperado
Posts: 879
Joined: Mon Dec 15, 2008 11:45 am

Re: Splitted MAGICS

Post by Desperado »

in your case 4*64 +
"4" if like you say magicnumber/direction

on chesswiki "1" mconst shared for 3 directions...