[ create a new paste ] login | about

Link: http://codepad.org/G2SBmTnC    [ raw code | output | fork ]

C, pasted on May 19:
// drfuchs modification of pantalaimon's original                               
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>

#define ARRAY_SIZE 1048576
#define ITERATIONS 1000

int myarray[ARRAY_SIZE+1];

bool search_naive(int key, int len)
{
  int *ary = &myarray[0], *end = ary+len;
  for (; ary != end; ++ary)
    if (*ary == key)
      return true;
  return false;
}

bool search_knuth(int key, int len)
{
  int *ary = &myarray[0], *end = ary+len;
  *end = key;
  for (; *ary != key; ++ary) { }
  return ary != end;
}

static int do_benchmark(bool (*search)(int, int), int key, int len)
{
  int found = 0;
  struct timespec t[2];
  unsigned long time_ns;
  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &t[0]);
  for (int i = 0; i < ITERATIONS; ++i)
    found += search(key, len);
  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &t[1]);
  time_ns = t[1].tv_nsec-t[0].tv_nsec + 1000000000*(t[1].tv_sec-t[0].tv_sec);
  printf("average: %.2f ns\n", (float)time_ns / ITERATIONS);
  return found;
}

int main(void)
{
  for (int i = 0; i < ARRAY_SIZE; ++i)
    myarray[i] = random();
  const int siz = ARRAY_SIZE - (random() & 1); // avoid loop unrolling          
  const int key = random();
  int tot = 0;
  puts("naive search"); tot += do_benchmark(search_naive, key, siz);
  puts("knuth search"); tot += do_benchmark(search_knuth, key, siz);
  return tot; // so searches aren't optimized away                              
}


Output:
1
2
3
4
In function 'do_benchmark':
Line 36: error: 'for' loop initial declaration used outside C99 mode
In function 'main':
Line 46: error: 'for' loop initial declaration used outside C99 mode


Create a new paste based on this one


Comments: