Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: the winner is: function pointer :)

Author: Ricardo Gibert

Date: 14:28:59 07/09/03

Go up one level in this thread


On July 09, 2003 at 17:02:09, Gerd Isenberg wrote:

>Hi Jeremiah,
>
>Yes, also on Athlon xp2.8+ with MSVC 6 - little surprise due to the call
>overhead. But "switch" is a bit size optimized, some jumps to common case code.
>I used __assume(0) in switch default cases (Reinhard, Tim and switch256, Heiner
>requires explicit case -1: donothing) to avoid one additional conditional jump
>before the indirect switch jump.
>Anyway funcp is fastest most often - all these tiny, very cache friendly
>functions are 16 Byte aligned (with a lot of nops inbetween).
>
>But there is of course some "noise" in this dumb loop test, based on the order
>of funcp-functions and "bad" random numbers. Of course no serious test - just an
>instructional fun contest. The "surprise" for me is that the simple approach
>seem to outperform Andrew's approach, may be due to the higher bits have no
>higher probability with the low density numbers.
>
>Even if it's a kind of "perverse", i like Heiner's approach very much, with the
>"cases" in deeper and deeper nested if-blocks.

I still like simple. Easy to write, easy to modify, easy to read, easy to debug
and performance-wise far from being terribly outclassed by the fancier tries and
when you consider that Uri has admitted it would only get called 2 times per
position...

>
>Regards,
>Gerd
>
>
>
>lonesome one bit:
>Simple   0x20e17a76, time = 1.762
>Andrew   0x20e17a76, time = 1.783
>Tim      0x20e17a76, time = 1.412
>Heiner   0x20e17a76, time = 1.352
>Reinhard 0x20e17a76, time = 1.502
>switch   0x20e17a76, time = 1.302
>funcp    0x20e17a76, time = 1.221
>
>up to two one bits:
>Simple   0x226c8b78, time = 1.903
>Andrew   0x226c8b78, time = 1.983
>Tim      0x226c8b78, time = 1.632
>Heiner   0x226c8b78, time = 1.623
>Reinhard 0x226c8b78, time = 1.802
>switch   0x226c8b78, time = 1.713
>funcp    0x226c8b78, time = 1.332
>
>up to three one bits:
>Simple   0x23f27d79, time = 2.083
>Andrew   0x23f27d79, time = 2.163
>Tim      0x23f27d79, time = 2.043
>Heiner   0x23f27d79, time = 1.902
>Reinhard 0x23f27d79, time = 2.113
>switch   0x23f27d79, time = 1.863
>funcp    0x23f27d79, time = 1.492
>
>eight random bits:
>Simple   0x83001752, time = 3.175
>Andrew   0x83001752, time = 3.134
>Tim      0x83001752, time = 5.188
>Heiner   0x83001752, time = 3.375
>Reinhard 0x83001752, time = 4.656
>switch   0x83001752, time = 1.442
>funcp    0x83001752, time = 1.493
>
>eight random bits high one probability:
>Simple   0xb78285c8, time = 2.663
>Andrew   0xb78285c8, time = 2.885
>Tim      0xb78285c8, time = 7.240
>Heiner   0xb78285c8, time = 3.305
>Reinhard 0xb78285c8, time = 6.499
>switch   0xb78285c8, time = 1.763
>funcp    0xb78285c8, time = 1.822
>
>eight one bits 0xff:
>Simple   0x0642ac00, time = 0.811
>Andrew   0x0642ac00, time = 1.062
>Tim      0x0642ac00, time = 8.853
>Heiner   0x0642ac00, time = 1.542
>Reinhard 0x0642ac00, time = 7.511
>switch   0x0642ac00, time = 0.721
>funcp    0x0642ac00, time = 1.011



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.