Micheal,
Is that all the output you get? Did you notice that the first line with
test-error changed ... the second number went from 31 to 32. We did
something! But not what I expected. BTW. The program does not normally
crash, it just stops after its initial testing is completed and errors
were detected. If you actually went from a gazillion line to just one,
we have hit a nerve. I you just didn't bother to copy the rest of the
output, we made no progress. But, since the output actually changed, it
would still be nice to see a few more lines and see the trend.
Thanks for helping ... debugging for someone else must not be the best
use of your time,
René
On Tue, Aug 25, 2009 at 8:03 PM, Michael Williams
<michaelwilliam...@gmail.com <mailto:michaelwilliam...@gmail.com>> wrote:
No. The code is now:
__forceinline
unsigned int bitmap_t::lowest_index () const {
const __m128i comp = _mm_cmpeq_epi32 (_mm_setzero_si128 (), board);
unsigned long m = _mm_movemask_epi8 (comp) ^ 0xffff;
if (!_BitScanForward (&m, m)) return 127;
/* offending instruction */
//return 8*m + __lzcnt (board.m128i_u32[m/4]);
/* new code follows */
unsigned long n;
_BitScanForward (&n, board.m128i_u32[m/4]);
return 8*m + (32-n);
}
Debug:
testing _BitScanForward (&m, 0): 0 1099227377
testing _BitScanForward (&m, 1): 1 0
testing _BitScanForward (&m, 256): 1 8
testing _BitScanReverse (&m, 0): 0 1103042705
testing _BitScanReverse (&m, 1): 1 0
testing _BitScanReverse (&m, 256): 1 8
test-error [bitmap_t::lowest_index]: 0 32
Release:
testing _BitScanForward (&m, 0): 0 16843009
testing _BitScanForward (&m, 1): 1 0
testing _BitScanForward (&m, 256): 1 8
testing _BitScanReverse (&m, 0): 0 4
testing _BitScanReverse (&m, 1): 1 0
testing _BitScanReverse (&m, 256): 1 8
test-error [bitmap_t::lowest_index]: 0 32
René van de Veerdonk wrote:
Micheal,
Your output is actually correct. The output is undefined when
the second argument to _BitScanForward is zero and that is what
I am explicitly testing for in the method
bitmap_t::lowest_index, which is supposed to return an index to
any set bit (despite the name). Your output shows that it
returns a number that is off in a very predictable way (it seems
that replacing "8*m + n" with "8*m + (32-n)" on the last line
may do the trick for you, but it breaks my local copy). So, now
I am positively baffled.
Help?
René
On Tue, Aug 25, 2009 at 7:25 PM, Michael Williams
<michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>> wrote:
Debug build:
testing _BitScanForward (&m, 0): 0 842032512
testing _BitScanForward (&m, 1): 1 0
testing _BitScanForward (&m, 256): 1 8
testing _BitScanReverse (&m, 0): 0 840277132
testing _BitScanReverse (&m, 1): 1 0
testing _BitScanReverse (&m, 256): 1 8
Release build:
testing _BitScanForward (&m, 0): 0 16843009
testing _BitScanForward (&m, 1): 1 0
testing _BitScanForward (&m, 256): 1 8
testing _BitScanReverse (&m, 0): 0 4
testing _BitScanReverse (&m, 1): 1 0
testing _BitScanReverse (&m, 256): 1 8
Sucks when they produce different results.
René van de Veerdonk wrote:
Micheal,
Thanks for trying. Could you try one or two more things?
(1) Replace the _BitScanForward in the new code to
_BitScanReverse. This probably won't help.
(2) Add this to bitmapgo.cpp:
/* sandbox */
const bool sandbox = true;
void test_sandbox () {
unsigned long m = 220;
unsigned char test_it = _BitScanForward (&m, 0);
std::cout << "testing _BitScanForward (&m, 0): "
<< (int) test_it << " " << m << "\n";
test_it = _BitScanForward (&m, 1);
std::cout << "testing _BitScanForward (&m, 1): "
<< (int) test_it << " " << m << "\n";
test_it = _BitScanForward (&m, 256);
std::cout << "testing _BitScanForward (&m, 256): "
<< (int) test_it << " " << m << "\n";
test_it = _BitScanReverse (&m, 0);
std::cout << "testing _BitScanReverse (&m, 0): "
<< (int) test_it << " " << m << "\n";
test_it = _BitScanReverse (&m, 1);
std::cout << "testing _BitScanReverse (&m, 1): "
<< (int) test_it << " " << m << "\n";
test_it = _BitScanReverse (&m, 256);
std::cout << "testing _BitScanReverse (&m, 256): "
<< (int) test_it << " " << m << "\n";
}
and add a line something like this in the main program:
if (test && sandbox) test_sandbox (); /* new line */
if (test && verify) test = test_bitmap_t::test (); /*
already
there */
That does not solve anything, but it may tell me if those
functions are doing for you what they do for me.
My output is:
testing _BitScanForward (&m, 0): 0 16843009
testing _BitScanForward (&m, 1): 1 0
testing _BitScanForward (&m, 256): 1 8
testing _BitScanReverse (&m, 0): 0 3432104
testing _BitScanReverse (&m, 1): 1 0
testing _BitScanReverse (&m, 256): 1 8
Thanks, I really appreciate your help !
René
On Tue, Aug 25, 2009 at 6:38 PM, Michael Williams
<michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>>> wrote:
That doesn't seem to have any effect on the results.
René van de Veerdonk wrote:
Hi Micheal,
Thanks for the test (Intel -> AMD, Windows XP ->
Windows
7, x32
-> x64, great, three birds with one stone!). So
much for
portability. But, hooray for test-cases!
This may be related to the __lzcnt intrinsic,
giving you a
completely different result, i.e., 32 - my result.
Could
you try
replacing this function in bitmap.cpp? I believe I
tested
this
alternative during development and it generates
only slightly
worse performing code.
__forceinline
unsigned int bitmap_t::lowest_index () const {
const __m128i comp = _mm_cmpeq_epi32
(_mm_setzero_si128
(), board);
unsigned long m = _mm_movemask_epi8 (comp) ^ 0xffff;
if (!_BitScanForward (&m, m)) return 127;
/* offending instruction */
//return 8*m + __lzcnt (board.m128i_u32[m/4]);
/* new code follows */
unsigned long n;
_BitScanForward (&n, board.m128i_u32[m/4]);
return 8*m + n;
}
René
PS. x64 ... new playground, you could use
__lzcnt64 ...
so many
things to try!
On Tue, Aug 25, 2009 at 5:43 PM, Michael Williams
<michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>
<mailto:michaelwilliam...@gmail.com
<mailto:michaelwilliam...@gmail.com>>>>> wrote:
(AMD Phenom CPU)
Michael Williams wrote:
It came through fine the first time. Gmail
probably hid the
duplicate text from you for convenience
since it
saw that
it was
text that you already sent out. Or something.
I can compile the original (9x9) bitmap Go
files
in Windows 7
x64, but when I run it I get this:
test-error [bitmap_t::lowest_index]: 0 31
test-error [bitmap_t::lowest_index]: 1 30
test-error [bitmap_t::lowest_index]: 2 29
test-error [bitmap_t::lowest_index]: 3 28
test-error [bitmap_t::lowest_index]: 4 27
test-error [bitmap_t::lowest_index]: 5 26
test-error [bitmap_t::lowest_index]: 6 25
test-error [bitmap_t::lowest_index]: 7 24
test-error [bitmap_t::lowest_index]: 8 23
test-error [bitmap_t::lowest_index]: 9 22
test-error [bitmap_t::lowest_index]: 10 21
test-error [bitmap_t::lowest_index]: 11 20
test-error [bitmap_t::lowest_index]: 12 19
test-error [bitmap_t::lowest_index]: 13 18
test-error [bitmap_t::lowest_index]: 14 17
test-error [bitmap_t::lowest_index]: 15 16
test-error [bitmap_t::lowest_index]: 16 15
test-error [bitmap_t::lowest_index]: 17 14
test-error [bitmap_t::lowest_index]: 18 13
test-error [bitmap_t::lowest_index]: 19 12
test-error [bitmap_t::lowest_index]: 20 11
test-error [bitmap_t::lowest_index]: 21 10
test-error [bitmap_t::lowest_index]: 22 9
test-error [bitmap_t::lowest_index]: 23 8
test-error [bitmap_t::lowest_index]: 24 7
test-error [bitmap_t::lowest_index]: 25 6
test-error [bitmap_t::lowest_index]: 26 5
test-error [bitmap_t::lowest_index]: 27 4
test-error [bitmap_t::lowest_index]: 28 3
test-error [bitmap_t::lowest_index]: 29 2
test-error [bitmap_t::lowest_index]: 30 1
test-error [bitmap_t::lowest_index]: 31 0
test-error [bitmap_t::lowest_index]: 32 63
test-error [bitmap_t::lowest_index]: 33 62
test-error [bitmap_t::lowest_index]: 34 61
test-error [bitmap_t::lowest_index]: 35 60
test-error [bitmap_t::lowest_index]: 36 59
test-error [bitmap_t::lowest_index]: 37 58
test-error [bitmap_t::lowest_index]: 38 57
test-error [bitmap_t::lowest_index]: 39 56
test-error [bitmap_t::lowest_index]: 40 55
test-error [bitmap_t::lowest_index]: 41 54
test-error [bitmap_t::lowest_index]: 42 53
test-error [bitmap_t::lowest_index]: 43 52
test-error [bitmap_t::lowest_index]: 44 51
test-error [bitmap_t::lowest_index]: 45 50
test-error [bitmap_t::lowest_index]: 46 49
test-error [bitmap_t::lowest_index]: 47 48
test-error [bitmap_t::lowest_index]: 48 47
test-error [bitmap_t::lowest_index]: 49 46
test-error [bitmap_t::lowest_index]: 50 45
test-error [bitmap_t::lowest_index]: 51 44
test-error [bitmap_t::lowest_index]: 52 43
test-error [bitmap_t::lowest_index]: 53 42
test-error [bitmap_t::lowest_index]: 54 41
test-error [bitmap_t::lowest_index]: 55 40
test-error [bitmap_t::lowest_index]: 56 39
test-error [bitmap_t::lowest_index]: 57 38
test-error [bitmap_t::lowest_index]: 58 37
test-error [bitmap_t::lowest_index]: 59 36
test-error [bitmap_t::lowest_index]: 60 35
test-error [bitmap_t::lowest_index]: 61 34
test-error [bitmap_t::lowest_index]: 62 33
test-error [bitmap_t::lowest_index]: 63 32
test-error [bitmap_t::lowest_index]: 64 95
test-error [bitmap_t::lowest_index]: 65 94
test-error [bitmap_t::lowest_index]: 66 93
test-error [bitmap_t::lowest_index]: 67 92
test-error [bitmap_t::lowest_index]: 68 91
test-error [bitmap_t::lowest_index]: 69 90
test-error [bitmap_t::lowest_index]: 70 89
test-error [bitmap_t::lowest_index]: 71 88
test-error [bitmap_t::lowest_index]: 72 87
test-error [bitmap_t::lowest_index]: 73 86
test-error [bitmap_t::lowest_index]: 74 85
test-error [bitmap_t::lowest_index]: 75 84
test-error [bitmap_t::lowest_index]: 76 83
test-error [bitmap_t::lowest_index]: 77 82
test-error [bitmap_t::lowest_index]: 78 81
test-error [bitmap_t::lowest_index]: 79 80
test-error [bitmap_t::lowest_index]: 80 79
test-error-1 [bitmap_t::is_one_bit]: 0
test-error-1 [bitmap_t::is_one_bit]: 1
test-error-1 [bitmap_t::is_one_bit]: 2
test-error-1 [bitmap_t::is_one_bit]: 3
test-error-1 [bitmap_t::is_one_bit]: 4
test-error-1 [bitmap_t::is_one_bit]: 5
test-error-1 [bitmap_t::is_one_bit]: 6
test-error-1 [bitmap_t::is_one_bit]: 7
test-error-1 [bitmap_t::is_one_bit]: 8
test-error-1 [bitmap_t::is_one_bit]: 9
test-error-1 [bitmap_t::is_one_bit]: 10
test-error-1 [bitmap_t::is_one_bit]: 11
test-error-1 [bitmap_t::is_one_bit]: 12
test-error-1 [bitmap_t::is_one_bit]: 13
test-error-1 [bitmap_t::is_one_bit]: 14
test-error-1 [bitmap_t::is_one_bit]: 15
test-error-1 [bitmap_t::is_one_bit]: 16
test-error-1 [bitmap_t::is_one_bit]: 17
test-error-1 [bitmap_t::is_one_bit]: 18
test-error-1 [bitmap_t::is_one_bit]: 19
test-error-1 [bitmap_t::is_one_bit]: 20
test-error-1 [bitmap_t::is_one_bit]: 21
test-error-1 [bitmap_t::is_one_bit]: 22
test-error-1 [bitmap_t::is_one_bit]: 23
test-error-1 [bitmap_t::is_one_bit]: 24
test-error-1 [bitmap_t::is_one_bit]: 25
test-error-1 [bitmap_t::is_one_bit]: 26
test-error-1 [bitmap_t::is_one_bit]: 27
test-error-1 [bitmap_t::is_one_bit]: 28
test-error-1 [bitmap_t::is_one_bit]: 29
test-error-1 [bitmap_t::is_one_bit]: 30
test-error-1 [bitmap_t::is_one_bit]: 31
test-error-1 [bitmap_t::is_one_bit]: 32
test-error-1 [bitmap_t::is_one_bit]: 33
test-error-1 [bitmap_t::is_one_bit]: 34
test-error-1 [bitmap_t::is_one_bit]: 35
test-error-1 [bitmap_t::is_one_bit]: 36
test-error-1 [bitmap_t::is_one_bit]: 37
test-error-1 [bitmap_t::is_one_bit]: 38
test-error-1 [bitmap_t::is_one_bit]: 39
test-error-1 [bitmap_t::is_one_bit]: 40
test-error-1 [bitmap_t::is_one_bit]: 41
test-error-1 [bitmap_t::is_one_bit]: 42
test-error-1 [bitmap_t::is_one_bit]: 43
test-error-1 [bitmap_t::is_one_bit]: 44
test-error-1 [bitmap_t::is_one_bit]: 45
test-error-1 [bitmap_t::is_one_bit]: 46
test-error-1 [bitmap_t::is_one_bit]: 47
test-error-1 [bitmap_t::is_one_bit]: 48
test-error-1 [bitmap_t::is_one_bit]: 49
test-error-1 [bitmap_t::is_one_bit]: 50
test-error-1 [bitmap_t::is_one_bit]: 51
test-error-1 [bitmap_t::is_one_bit]: 52
test-error-1 [bitmap_t::is_one_bit]: 53
test-error-1 [bitmap_t::is_one_bit]: 54
test-error-1 [bitmap_t::is_one_bit]: 55
test-error-1 [bitmap_t::is_one_bit]: 56
test-error-1 [bitmap_t::is_one_bit]: 57
test-error-1 [bitmap_t::is_one_bit]: 58
test-error-1 [bitmap_t::is_one_bit]: 59
test-error-1 [bitmap_t::is_one_bit]: 60
test-error-1 [bitmap_t::is_one_bit]: 61
test-error-1 [bitmap_t::is_one_bit]: 62
test-error-1 [bitmap_t::is_one_bit]: 63
test-error-1 [bitmap_t::is_one_bit]: 64
test-error-1 [bitmap_t::is_one_bit]: 65
test-error-1 [bitmap_t::is_one_bit]: 66
test-error-1 [bitmap_t::is_one_bit]: 67
test-error-1 [bitmap_t::is_one_bit]: 68
test-error-1 [bitmap_t::is_one_bit]: 69
test-error-1 [bitmap_t::is_one_bit]: 70
test-error-1 [bitmap_t::is_one_bit]: 71
test-error-1 [bitmap_t::is_one_bit]: 72
test-error-1 [bitmap_t::is_one_bit]: 73
test-error-1 [bitmap_t::is_one_bit]: 74
test-error-1 [bitmap_t::is_one_bit]: 75
test-error-1 [bitmap_t::is_one_bit]: 76
test-error-1 [bitmap_t::is_one_bit]: 77
test-error-1 [bitmap_t::is_one_bit]: 78
test-error-1 [bitmap_t::is_one_bit]: 79
test-error-1 [bitmap_t::is_one_bit]: 80
And then it crashes.
René van de Veerdonk wrote:
[I do not know what happens, but this
is the
second
time the
computer-go archives miss the body.
Maybe its the
attachment. I apologize for sending
this a second
time, this
time without attachment. If someone
knows what the
problem
is ... I am using Gmail]
Antoine,
I apologize for misrepresenting your
feelings.
What I
wanted
to convey is that your e-mail expressed
that
with the
same
amount of computation, other implementation
strategies
provide more information, so the
information
gained
for the
effort put in is disappointing. In other
words, bitmap-go
had better be much faster to make up
for the
lack of
information gained ... and it wasn't.
That's
pretty much
what you are saying as well, I believe.
As are the
others in
this thread. I think we can all agree
on this.
Going into this project, I was well
aware that
I was
going
to end up with light playouts only, and
that heavy
playouts
is the way to go except perhaps for some
special purposes
such as ladder readouts. I was also
well aware
of the
scaling argument. But, I hadn't thought
that this
would be
the first thing thrown at my first post, as
there are
many
programmers that seem to be stuck at 9x9.
Nonetheless,
bitmap-go as a topic keeps resurfacing
on this
mailing list
every once in a while and nobody ever put
solid data
and a
reference implementation behind it.
That is what I
wanted to
accomplish with my mockup.
Confession #2: I have been working on
my own MCTS
implementation using the standard
implementation methods
that almost everybody else is using.
But there
is a
never-ending laundry-list of things that I
would like to
include before I would reach reasonable
strength (where
reasonable is a moving target). In the
mean time,
there are
many others that have demonstrated much
more
capable
programmers than I ever will be. So, by
providing this
bitmap-go mockup at least I had the feeling
that I was
contributing something newsworthy to the
conversation. This
may have never happened if I would wait
until
my MCTS
program is ready. I imagine that there are
others on this
list in a similar situation. Besides,
this was an
interesting side-project and perhaps
someone
else can
benefit from it (go for it Brian!).
And, yes,
it was fun.
Okay, enough mesmerizing, on to the
main topic.
David, Lukasz,
I did modify my mockup to do 19x19
bitmap-go
(attached). It
is a hardcoded solution using arrays of
three
128-bit
variables. I did not even attempt to
optimize this
version,
so this is not the best possible solution.
Nonetheless, here
is a comparison:
Example output (9x9):
=====================
[game] = 30236.1, [moves] = 111.071
[game] = 30249.7, [moves] = 111.068
[game] = 30145.7, [moves] = 111.089
[game] = 30237.7, [moves] = 111.122
[game] = 30210.1, [moves] = 111.101
[game] = 78.0488 kpps, [moves] = 111.023
[game] = 78.0488 kpps, [moves] = 111.045
[game] = 78.0488 kpps, [moves] = 111.046
[game] = 79.0123 kpps, [moves] = 111.131
[game] = 78.0488 kpps, [moves] = 111.082
[legal] 110/51, [pick] 110/74, [play]
106/168,
[score] 44,
[win] 0.4187
[legal] 111/51, [pick] 111/74, [play]
106/168,
[score] 40,
[win] 0.4201
[legal] 111/52, [pick] 111/75, [play]
106/168,
[score] 42,
[win] 0.4276
[legal] 111/52, [pick] 111/74, [play]
106/169,
[score] 41,
[win] 0.4092
[legal] 111/52, [pick] 111/74, [play]
106/169,
[score] 44,
[win] 0.4221
Example output (19x19):
=======================
[game] = 316452, [moves] = 455.036
[game] = 316378, [moves] = 455.126
[game] = 316266, [moves] = 455.177
[game] = 316017, [moves] = 455.08
[game] = 316210, [moves] = 455.16
[game] = 7.45052 kpps, [moves] = 455.267
[game] = 7.45921 kpps, [moves] = 455.055
[game] = 7.45921 kpps, [moves] = 455.17
[game] = 7.45921 kpps, [moves] = 455.188
[game] = 7.47664 kpps, [moves] = 455.013
[legal] 454/144, [pick] 454/128, [play]
449/430, [score]
173, [win] 0.4592
[legal] 455/144, [pick] 455/128, [play]
449/431, [score]
173, [win] 0.4655
[legal] 454/144, [pick] 454/128, [play]
449/430, [score]
173, [win] 0.4611
[legal] 454/144, [pick] 454/128, [play]
449/431, [score]
173, [win] 0.4674
[legal] 455/144, [pick] 455/128, [play]
450/430, [score]
175, [win] 0.4661
Summary:
========
function 9x9 19x19 ratio
-----------------------------------
game [ cc ] 30216 316265 10.47
game [kpps] 78 7.46 10.45
moves 111 455 4.10
legal [ cc ] 52 144 2.77
pick [ cc ] 74 128 1.73
play [ cc ] 168 430 2.56
score [ cc ] 42 173 4.12
legal+pick+play 294 702 2.39
So, it looks that I was overly
pessimistic in
terms of
performance drop per move, which is a
factor
of 2.4x
(with
little effort to optimize for 19x19). But,
with 4.1x more
moves, this still resulted in a 10x
speed penalty.
With the
provided reference numbers, Libego only
drops
4.5-5.0x,
indicating that there is almost no
performance
loss
per move
(1.2x). Is this difference roughly in line
with others
expectation?
With that, I hope this at least
provides some
data for
future discussions, and reference
implementation for
others
that may want to pick up the ball from
here.
Someone
could
add a gtp-interface and make it
available as
one of Don's
reference implementations for starting
go-programmers. I
would still be interested to improve this
solution, but I
think I need a fresh set of eyes in
order to
make any
more
progress. I would like to re-iterate
that I expect
significant gains on a 64-bit OS as a
result
on the
doubling
of the number of available registers.
It would
be nice if
someone would be able to post some results.
Newer CPU's
(will) also have instructions available
that can
significantly speed things up
(bit-test, compare,
popcount,
wider variables, etc).
René van de Veerdonk
On Tue, Aug 25, 2009 at 12:42 PM,
Antoine de
Maricourt
<antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>
<mailto:antoine.de-marico...@m4x.org
<mailto:antoine.de-marico...@m4x.org>>>>>> wrote:
Hi René,
David,
Confession: I have not tested
19x19. As
you have
noted, and
others before you over the
years, a 19x19
board does
not fit in
one but three 128-bit registers
and there
would be a
rather big
penalty as a result, perhaps
(likely?)
wiping
out all
of the
benefits of bitmaps. Antoine
voiced his
disappointment about the
speed advantage even on 9x9 in the
e-mail to
the list
that
served as my basis. My hope, as
Hideko
Kato points
out, is in
longer registers or perhaps
being able
to port
this
to a GPU. A
64-bit OS with twice the number
registers
would also
surely help
out. Nevertheless, I was
surprised that
I was
able to
get to
almost the same level of speed as
Libego provides.
As far as I remember, I was not
disappointed by
the speed
itself on
9x9 boards, but mainly with the
following 2
points:
a) my feeling is that, as you say,
it does not
scale very
well on
19x19 (on current hardware).
I don't think other "classical"
implementations suffer
such a big
penalty when scaling from 9x9 to 19x19.
b) I also felt that this kind of
implementation
was not
very flexible.
For instance, I had another classical
implementation,
running at
equivalent speed, but in which local 3x3
pattern
matching
was almost
for free, as well as other more
elaborated
information.
When I started to think about
introducing
3x3 local
patterns in the
bitmap only implementation, it was
clear it
would
not be
for free.
At that time, my conclusion was that
if one
only needs
pure random
play with no intelligence at all during
playouts,
then bitmap
implementation could compete (at
least on 9x9).
If one needs more elaborated knowledge
(such as small
patterns
matching, or even knowledge about
blocks of
stones), then
pure
bitmap implementation is probably not so
competitive.
I thus gave up with the idea and
jumped to more
promising
ones.
Anyway, I'm glad my post has been
usefull
to you.
And I
encourage
you to improve your implementation
and let
us know,
especially if
you have fun. Starting with
something and
playing
with it
is a good
way to have new ideas, even if this
makes
your initial
ones look
less interesting a while after.
Best regards,
Antoine
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>>>
http://www.computer-go.org/mailman/listinfo/computer-go/
------------------------------------------------------------------------
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>>
http://www.computer-go.org/mailman/listinfo/computer-go/
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>>
http://www.computer-go.org/mailman/listinfo/computer-go/
------------------------------------------------------------------------
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>
http://www.computer-go.org/mailman/listinfo/computer-go/
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>>
http://www.computer-go.org/mailman/listinfo/computer-go/
------------------------------------------------------------------------
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
http://www.computer-go.org/mailman/listinfo/computer-go/
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
<mailto:computer-go@computer-go.org>
<mailto:computer-go@computer-go.org
<mailto:computer-go@computer-go.org>>
http://www.computer-go.org/mailman/listinfo/computer-go/
------------------------------------------------------------------------
_______________________________________________
computer-go mailing list
computer-go@computer-go.org <mailto:computer-go@computer-go.org>
http://www.computer-go.org/mailman/listinfo/computer-go/
_______________________________________________
computer-go mailing list
computer-go@computer-go.org <mailto:computer-go@computer-go.org>
http://www.computer-go.org/mailman/listinfo/computer-go/
------------------------------------------------------------------------
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/