All pastes #400531 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-03-18 19:13 UTC
rendered paste body
#include <sys/time.h>
#include <pthread.h>

#include <vector/vector.h>

void try_proc_raw(void)
{
  float b[1024];
  pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
  unsigned int ind;
  unsigned int jnd;

  for (ind = 0; ind < 1024; ++ind) {
    pthread_mutex_lock(&mtx);
    for (jnd = 0; jnd < 1024; ++jnd)
      b[jnd] *= jnd;
    pthread_mutex_unlock(&mtx);
  }
}

void try_proc_sse(void)
{
  vector_16f buf[64];
  float *f;
  pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
  unsigned int ind;
  unsigned int jnd;

  f = (float *) buf;
  for (ind = 0; ind < 1024; ++ind) {
    pthread_mutex_lock(&mtx);
    vec_multscNf(buf, (float) jnd, 1024);
    pthread_mutex_unlock(&mtx);
  }
}

void howlong(const char *fn, void (*func)(void))
{
  struct timespec t1;
  struct timespec t2;

  clock_gettime(CLOCK_REALTIME, &t1);
  func();
  clock_gettime(CLOCK_REALTIME, &t2);

  printf("%s %lu\n", fn, t2.tv_nsec - t1.tv_nsec);
}

int main(void)
{
  howlong("try_proc_raw", try_proc_raw);
  howlong("try_proc_sse", try_proc_sse);
  return 0;
}