Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: the winner is: Heiner

Author: Dieter Buerssner

Date: 15:10:28 07/08/03

Go up one level in this thread


Out of curiosity, I added the code generated by the following program just
before your main:

#include <stdio.h>

int main(void)
{
  unsigned i,j;
  for (i=0; i<256; i++)
  {
    printf("void func%d(void)\n{\n", i);
    for (j=0; j<8; j++)
      if (i & (1<<j))
        printf("  handleBit%d();\n", j);
    printf("}\n\n");
  }
  printf("typedef void (*FUNC)(void);\n\nFUNC funcs[256]={\n");
  for (i=0; i<256; i++)
    printf("  func%d%s\n", i, i<255?",":"");
  printf("};\n");
}

And added


void funcp(int uptoNbits)
{
	int i;
	clock_t start, stop;

	mySeedRand(0);
	n = n1 = n2 = n3 = n4 = n5 = n6 = n7 = n8 = 0;
	start = clock();

	for (i = 0 ; i < MAX_ITERATIONS; i++)
	{
		unsigned long bits = randbits(uptoNbits);
	        funcs[bits]();
	}
	stop = clock();
	n = n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8;
	printf("funcp    0x%08lx, time = %.3f\n", n, (float)(stop - start) /
CLOCKS_PER_SEC);
}

Note, that you used %x for unsigned long (no prob with MSVC, but will fail with
some other compilers).

Also added funcp(i) to the loop in main() (I changed it to int main(void), some
compilers will refuse to translate void main()). I translated it as cpp (because
of some for loops that are not valid in "old" ISO C).

My results (P4, 2.53 GHz, MSVC 6  -Ox2 -Ob2  -G6 -Gf -Gr):

lonesome one bit:
Simple   0x20e17a76, time = 1.962
Andrew   0x20e17a76, time = 2.284
Tim      0x20e17a76, time = 1.722
Heiner   0x20e17a76, time = 1.642
Reinhard 0x20e17a76, time = 1.613
switch   0x20e17a76, time = 1.672
funcp    0x20e17a76, time = 1.853

up to two one bits:
Simple   0x226c8b78, time = 2.443
Andrew   0x226c8b78, time = 2.824
Tim      0x226c8b78, time = 2.254
Heiner   0x226c8b78, time = 2.213
Reinhard 0x226c8b78, time = 2.093
switch   0x226c8b78, time = 2.353
funcp    0x226c8b78, time = 2.123

up to three one bits:
Simple   0x23f27d79, time = 2.934
Andrew   0x23f27d79, time = 3.415
Tim      0x23f27d79, time = 2.714
Heiner   0x23f27d79, time = 2.654
Reinhard 0x23f27d79, time = 2.564
switch   0x23f27d79, time = 2.974
funcp    0x23f27d79, time = 2.363

eight random bits:
Simple   0x83001752, time = 4.847
Andrew   0x83001752, time = 4.767
Tim      0x83001752, time = 5.388
Heiner   0x83001752, time = 4.436
Reinhard 0x83001752, time = 4.247
switch   0x83001752, time = 1.782
funcp    0x83001752, time = 2.053

eight random bits high one probability:
Simple   0xb78285c8, time = 4.597
Andrew   0xb78285c8, time = 4.476
Tim      0xb78285c8, time = 6.469
Heiner   0xb78285c8, time = 4.517
Reinhard 0xb78285c8, time = 5.097
switch   0xb78285c8, time = 2.404
funcp    0xb78285c8, time = 2.573

eight one bits 0xff:
Simple   0x0642ac00, time = 0.922
Andrew   0x0642ac00, time = 1.041
Tim      0x0642ac00, time = 3.215
Heiner   0x0642ac00, time = 1.422
Reinhard 0x0642ac00, time = 2.193
switch   0x0642ac00, time = 0.701
funcp    0x0642ac00, time = 1.001

Regards,
Dieter




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.