Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
Arquivo: test.c Projeto: fanf2/qp
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);
}