Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Implementation of the abs() function [o.t.]

Author: Dieter Buerssner

Date: 14:56:39 07/06/03

Go up one level in this thread


Forgot the boring source code:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N_ITERATIONS    1000000000

#if __GNUC__
#define MY_INLINE __inline__
#define NOOP() __asm__ volatile("xorl %eax, %eax")
#else
#define MY_INLINE __forceinline
#define NOOP() _asm {xor eax, eax}
#endif

#define SEED(n) srand(n)

#define DECLARE_TEST_FUNC(name)  \
void tfunc_##name(void)          \
{                                \
  unsigned long n=N_ITERATIONS;  \
  do                             \
  {                              \
    name();                      \
  } while (--n != 0);            \
}

MY_INLINE void randnoop0(void)
{
  rand();
}

DECLARE_TEST_FUNC(randnoop0)

/* All will repeat fron now, just add NOOPs */
MY_INLINE void randnoop1(void)
{
  rand();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop1)

MY_INLINE void randnoop2(void)
{
  rand();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop2)

MY_INLINE void randnoop3(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop3)

MY_INLINE void randnoop4(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop4)

MY_INLINE void randnoop5(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop5)

MY_INLINE void randnoop6(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop6)

MY_INLINE void randnoop7(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop7)

MY_INLINE void randnoop8(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop8)

MY_INLINE void randnoop9(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop9)

MY_INLINE void randnoop10(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop10)

MY_INLINE void randnoop11(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop11)

MY_INLINE void randnoop12(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop12)

MY_INLINE void randnoop13(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop13)

MY_INLINE void randnoop14(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop14)

MY_INLINE void randnoop15(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop15)

MY_INLINE void randnoop16(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop16)

MY_INLINE void randnoop17(void)
{
  rand();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
  NOOP();
}

DECLARE_TEST_FUNC(randnoop17)

void time_func(void (*test_function)(void), const char *name);

#define TIME_FUNCTION(name) time_func(tfunc_##name, #name)

int main (void)
{
  TIME_FUNCTION(randnoop0);
  TIME_FUNCTION(randnoop1);
  TIME_FUNCTION(randnoop2);
  TIME_FUNCTION(randnoop3);
  TIME_FUNCTION(randnoop4);
  TIME_FUNCTION(randnoop5);
  TIME_FUNCTION(randnoop6);
  TIME_FUNCTION(randnoop7);
  TIME_FUNCTION(randnoop8);
  TIME_FUNCTION(randnoop9);
  TIME_FUNCTION(randnoop10);
  TIME_FUNCTION(randnoop11);
  TIME_FUNCTION(randnoop12);
  TIME_FUNCTION(randnoop13);
  TIME_FUNCTION(randnoop14);
  TIME_FUNCTION(randnoop15);
  TIME_FUNCTION(randnoop16);
  TIME_FUNCTION(randnoop17);
  return 0;
}

void time_func(void (*test_function)(void), const char *name)
{
  clock_t clk;
  SEED(0);
  clk = clock();
  test_function();
  clk = clock() - clk;

  printf("%14s %.3f\n", name, (double)clk / CLOCKS_PER_SEC);
}




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.