int main(int argc, char *argv[]) { params_t par; double timer_sscan; Tclear(par.timer_global); Tclear(par.timer_1); Tclear(par.timer_2); Tclear(par.timer_3); Tclear(par.timer_4); Tstart(par.timer_global); int k; printf("\nScan - OMP_Sscan\n"); Tstart(par.timer_4); cmd_parse(argc, argv, &par); Tstop(par.timer_4); OMP_Sscan(&par); timer_sscan = par.timer_1; for (k = 0; k < EXTRA; ++k) { memcpy(par.a, par.b, sizeof(int) * (1 + par.nalloc)); memcpy(par.f, par.fb, (1 + par.nalloc) * (sizeof(char))); OMP_Sscan(&par); timer_sscan = MIN(par.timer_1,timer_sscan); } par.timer_1 = timer_sscan; // PrintAll(&par); WriteOut(&par); Tstop(par.timer_global); printf(" wclock (sec): \t%.8lf\n", Tget(par.timer_global)); printf(" timer4 Init (sec): \t%.8lf\n", Tget(par.timer_4)); printf(" timer1 Sscan (sec) on %d runs: \t%.8lf\n", 1 + EXTRA, Tget(par.timer_1)); cleanup(&par); return 0; }
int main(int argc, char *argv[]) { progname = argv[0]; if(argc > 2) usage(); if(argc == 2) { if(argv[1][0] == '-') usage(); if(freopen(argv[1], "r", stdin) == NULL) die("open"); } Tbl *t = NULL; for (;;) { char *key = NULL; size_t len = 0; int s = getchar(); if(s < 0) break; ssize_t n = getline(&key, &len, stdin); if(n < 0) break; else len = (size_t)n; if(len > 0 && key[len-1] == '\n') key[--len] = '\0'; switch(s) { default: usage(); case('*'): if(Tget(t, key)) putchar('*'); else putchar('='); continue; case('+'): errno = 0; void *val = Tget(t, key); t = Tsetl(t, key, len, val == NULL ? key : val); if(t == NULL) die("Tbl"); if(!val) trace(t, s, key); else free(key); continue; case('-'): errno = 0; const char *rkey = NULL; void *rval = NULL; t = Tdelkv(t, key, len, &rkey, &rval); if(t == NULL && errno != 0) die("Tbl"); if(rkey) trace(t, s, key); free(key); free(rkey); continue; } } putchar('\n'); if(ferror(stdin)) die("read"); size_t size, depth, branches, leaves; const char *type; Tsize(t, &type, &size, &depth, &branches, &leaves); size_t overhead = size / sizeof(void*) - 2 * leaves; fprintf(stderr, "SIZE %s leaves=%zu branches=%zu overhead=%.2f depth=%.2f\n", type, leaves, branches, (double)overhead / leaves, (double)depth / leaves); const char *key = NULL; void *val = NULL, *prev = NULL; while(Tnext(t, &key, &val)) { assert(key == val); puts(key); if(prev) { t = Tdel(t, prev); trace(t, '!', prev); free(prev); } prev = val; } if(prev) { t = Tdel(t, prev); free(prev); } return(0); }