Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. /* funzione per inizializzare gli array */
  7. void init(int * restrict v1, int * restrict v2, int numels)
  8. {
  9.     for (int i = 0; i < numels; ++i) {
  10.         v1[i] = i;
  11.         v2[i] = numels - i;
  12.     }
  13. }
  14.  
  15. /* funzione per fare la somma degli array */
  16. void somma(int * restrict somma, const int * restrict v1, const int * restrict v2, int numels)
  17. {
  18.     for (int i = 0; i < numels; ++i) {
  19.         somma[i] = v1[i] + v2[i];
  20.     }
  21. }
  22.  
  23. int main(int argc, char *argv[]) {
  24.     int *v1, *v2, *vs;
  25.     int numels;
  26.    
  27.     clock_t start, end;
  28.     double runtime_ms;
  29.    
  30.     if (argc != 2) {
  31.         fputs("Specificare uno ed un solo parametro\n", stderr);
  32.         exit(128);
  33.     }
  34.    
  35.     numels = atoi(argv[1]);
  36.    
  37.     size_t memsize = numels * sizeof(*v1);
  38.    
  39.     v1 = malloc(memsize);
  40.     v2 = malloc(memsize);
  41.     vs = malloc(memsize);
  42.  
  43.     if (!v1 | !v2 | !vs) {
  44.        
  45.         fputs("Allocazione fallita\n", stderr);
  46.         exit(17);
  47.     }
  48.     start = clock();
  49.     init(v1, v2, numels);
  50.     end = clock();
  51.     runtime_ms = (end -start) *1000.0/CLOCKS_PER_SEC;
  52.     printf("init: %gms\n", runtime_ms);
  53.    
  54.     start = clock();
  55.     somma(vs, v1, v2, numels);
  56.     end = clock();
  57.     runtime_ms = (end -start) *1000.0/CLOCKS_PER_SEC;
  58.     printf("somma: %gms\n", runtime_ms);
  59.    
  60.  
  61.     for (int i = 0; i < numels; ++i) {
  62.         // printf("%d\t+\t%d\t=\t%d\n", v1[i], v2[i], vs[i]);
  63.         if (vs[i] != numels) {
  64.             fprintf(stderr, "%zu : %d != %d\n", i, vs[i], numels);
  65.             exit(1);
  66.         }
  67.     }
  68.     free(v1); v1 = NULL;
  69.     free(v2); v2 = NULL;
  70.     free(vs); vs = NULL;
  71.     puts("Tutto ok");
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement