Statistiques
| Révision :

root / ETSN / MySteps_1.c @ 302

Historique | Voir | Annoter | Télécharger (1,59 ko)

1 296 equemene
/* Simple Sum function in C */
2 296 equemene
/* compilation with : gcc -O3 -o MySteps_1 MySteps_1.c -lm */
3 296 equemene
4 296 equemene
#include <math.h>
5 296 equemene
#include <stdio.h>
6 296 equemene
#include <stdlib.h>
7 296 equemene
#include <sys/time.h>
8 296 equemene
9 296 equemene
#define PI 3.141592653589793
10 296 equemene
11 296 equemene
#define MYFLOAT float
12 296 equemene
13 296 equemene
void MySum(MYFLOAT *res, MYFLOAT *a, MYFLOAT *b, int size)
14 296 equemene
{
15 296 equemene
  for (uint i=0; i<size;i++)
16 296 equemene
    {
17 296 equemene
      res[i] = a[i] + b[i];
18 296 equemene
    }
19 296 equemene
}
20 296 equemene
21 296 equemene
MYFLOAT MyNorm(MYFLOAT *a,MYFLOAT *b,int size)
22 296 equemene
{
23 296 equemene
  MYFLOAT norm=0.;
24 296 equemene
25 296 equemene
  for (int i=0;i<size;i++)
26 296 equemene
    {
27 296 equemene
      norm+=pow(a[i]-b[i],2);
28 296 equemene
    }
29 296 equemene
30 296 equemene
  return(sqrt(norm));
31 296 equemene
}
32 296 equemene
33 296 equemene
void MyPrint(MYFLOAT *a,int size)
34 296 equemene
{
35 296 equemene
  printf("[");
36 296 equemene
  for (int i=0;i<size;i++)
37 296 equemene
    {
38 296 equemene
      printf(" %.8e ",a[i]);
39 296 equemene
    }
40 296 equemene
  printf("]\n");
41 296 equemene
}
42 296 equemene
43 296 equemene
int main(int argc,char *argv[])
44 296 equemene
{
45 296 equemene
  float *a,*b,*res,*resacc;
46 296 equemene
  int size=1024;
47 296 equemene
  struct timeval tv1,tv2;
48 296 equemene
49 296 equemene
  if (argc > 1) {
50 296 equemene
    size=(int)atoll(argv[1]);
51 296 equemene
  }
52 296 equemene
  else {
53 296 equemene
    printf("\n\tMySteps : Estimate SillySum\n\n\t\t#1 : size (default 1024)\n\n");
54 296 equemene
  }
55 296 equemene
56 297 equemene
  printf("%i\n",size);
57 296 equemene
58 296 equemene
  a=(float*)malloc(size*sizeof(MYFLOAT));
59 296 equemene
  b=(float*)malloc(size*sizeof(MYFLOAT));
60 296 equemene
  res=(float*)malloc(size*sizeof(MYFLOAT));
61 296 equemene
62 296 equemene
  srand(110271);
63 296 equemene
64 296 equemene
  for (int i=0;i<size;i++)
65 296 equemene
    {
66 296 equemene
      a[i]=(MYFLOAT)rand()/(MYFLOAT)RAND_MAX;
67 296 equemene
      b[i]=(MYFLOAT)rand()/(MYFLOAT)RAND_MAX;
68 296 equemene
      res[i]=0.;
69 296 equemene
    }
70 296 equemene
71 296 equemene
  gettimeofday(&tv1, NULL);
72 296 equemene
  MySum(res,a,b,size);
73 296 equemene
  gettimeofday(&tv2, NULL);
74 296 equemene
75 296 equemene
  MYFLOAT elapsed=(MYFLOAT)((tv2.tv_sec-tv1.tv_sec) * 1000000L +
76 296 equemene
                            (tv2.tv_usec-tv1.tv_usec))/1000000;
77 296 equemene
78 296 equemene
#ifdef VERBOSE
79 296 equemene
  MyPrint(res,size);
80 296 equemene
#endif
81 296 equemene
82 296 equemene
  printf("Elapsed Time: %.3f\n",elapsed);
83 296 equemene
84 296 equemene
  printf("NaiveRate: %.lld\n",(unsigned long)((float)size/elapsed));
85 296 equemene
86 296 equemene
  free(a);
87 296 equemene
  free(b);
88 296 equemene
  free(res);
89 296 equemene
}