예제 #1
0
파일: class.c 프로젝트: Aiduoduo123/em4gmm
/* Main execution of the classifier. */
int main(int argc,char *argv[]){
	number i,o,x=0,t=sysconf(_SC_NPROCESSORS_ONLN); decimal result;
	char *fnr=NULL,*fnf=NULL,*fnm=NULL,*fnw=NULL;
	while((o=getopt(argc,argv,"t:d:m:w:r:h"))!=-1){
		switch(o){
			case 't': t=atoi(optarg);
				if(t>256||t<1)show_error("Number of threads must be on the 1-256 range");
				break;
			case 'r': fnr=optarg; break;
			case 'd': fnf=optarg,x++; break;
			case 'm': fnm=optarg,x++; break;
			case 'w': fnw=optarg; break;
			case 'h': show_help(argv[0]),exit(1); break;
		}
	}
	if(x<2)show_help(argv[0]),exit(1); /* Test if exists needed arguments. */
	workers *pool=workers_create(t);
	data *feas=feas_load(fnf,pool); /* Load the data from the specified file. */
	gmm *gmix=NULL,*gworld=NULL;
	if(fnw!=NULL)gworld=gmm_load(fnw); /* Load world model if is defined.  */
	gmix=gmm_load(fnm);
	if(fnr!=NULL)result=gmm_classify(fnr,feas,gmix,gworld,pool);
	else result=gmm_simple_classify(feas,gmix,gworld,pool);
	fprintf(stdout,"Score: %.10f\n",result);
	workers_finish(pool);
	gmm_delete(gmix);
	if(gworld!=NULL)gmm_delete(gworld);
	feas_delete(feas);
	return 0;
}
예제 #2
0
int main(int argc, const char** argv)
{
  struct sockaddr_storage addr;
  socklen_t addrlen;
  options_t options;
  workers_t workers;
  uint8_t running, ready;
  sigset_t set;

  /* Check arguments. */
  if (argc == 1) {
    usage(argv[0]);
    return -1;
  }

  if (build_socket_address(argv[argc - 1], &addr, &addrlen) < 0) {
    fprintf(stderr, "Invalid socket address '%s'.\n", argv[argc - 1]);
    return -1;
  }

  if (options_parse(argc, argv, &options) < 0) {
    usage(argv[0]);
    return -1;
  }

  /* Block signals SIGINT and SIGTERM. */
  sigemptyset(&set);
  sigaddset(&set, SIGINT);
  sigaddset(&set, SIGTERM);
  if (pthread_sigmask(SIG_BLOCK, &set, NULL) < 0) {
    fprintf(stderr, "Error blocking signals.\n");

    options_free(&options);
    return -1;
  }

  /* Create worker threads. */
  if (workers_create((const struct sockaddr*) &addr,
                     addrlen,
                     &options,
                     &running,
                     &ready,
                     &workers) < 0) {
    fprintf(stderr, "Error creating worker threads.\n");

    options_free(&options);
    return -1;
  }

  /* Join worker threads. */
  workers_join(&workers, &running);

  /* Show statistics. */
  workers_statistics(&workers);

  options_free(&options);

  return 0;
}