Multithread fft
This commit is contained in:
		
							
								
								
									
										30
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								src/main.c
									
									
									
									
									
								
							@@ -13,7 +13,7 @@
 | 
			
		||||
int print_usage();
 | 
			
		||||
 | 
			
		||||
// read command line arguments
 | 
			
		||||
int read_args(int argc, const char* argv[], char** params, unsigned int* driving_force, unsigned int* command);
 | 
			
		||||
int read_args(int argc, const char* argv[], char** params, unsigned int* driving_force, unsigned int* command, unsigned int* nthreads);
 | 
			
		||||
int read_params(char* params, int* K1, int* K2, int* N1, int* N2, unsigned int* nsteps, double* nu, double* delta, unsigned int* print_freq);
 | 
			
		||||
int set_parameter(char* lhs, char* rhs, int* K1, int* K2, int* N1, int* N2, unsigned int* nsteps, double* nu, double* delta, unsigned int* print_freq, bool* setN1, bool* setN2);
 | 
			
		||||
 | 
			
		||||
@@ -38,12 +38,13 @@ int main (
 | 
			
		||||
  int ret;
 | 
			
		||||
  unsigned int driving,command;
 | 
			
		||||
  unsigned int print_freq;
 | 
			
		||||
  unsigned int nthreads=1;
 | 
			
		||||
 | 
			
		||||
  command=0;
 | 
			
		||||
  driving=0;
 | 
			
		||||
 | 
			
		||||
  // read command line arguments
 | 
			
		||||
  ret=read_args(argc, argv, ¶ms, &driving, &command);
 | 
			
		||||
  ret=read_args(argc, argv, ¶ms, &driving, &command, &nthreads);
 | 
			
		||||
  if(ret<0){
 | 
			
		||||
    return(-1);
 | 
			
		||||
  }
 | 
			
		||||
@@ -65,13 +66,13 @@ int main (
 | 
			
		||||
 | 
			
		||||
  // run command
 | 
			
		||||
  if (command==COMMAND_UK){
 | 
			
		||||
    uk(K1, K2, N1, N2, nsteps, nu, delta, g, print_freq);
 | 
			
		||||
    uk(K1, K2, N1, N2, nsteps, nu, delta, g, print_freq, nthreads);
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==COMMAND_ENSTROPHY){
 | 
			
		||||
    enstrophy(K1, K2, N1, N2, nsteps, nu, delta, g, print_freq);
 | 
			
		||||
    enstrophy(K1, K2, N1, N2, nsteps, nu, delta, g, print_freq, nthreads);
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==COMMAND_QUIET){
 | 
			
		||||
    quiet(K1, K2, N1, N2, nsteps, nu, delta, g);
 | 
			
		||||
    quiet(K1, K2, N1, N2, nsteps, nu, delta, g, nthreads);
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==0){
 | 
			
		||||
    fprintf(stderr, "error: no command specified\n");
 | 
			
		||||
@@ -90,14 +91,17 @@ int print_usage(){
 | 
			
		||||
// read command line arguments
 | 
			
		||||
#define CP_FLAG_PARAMS 1
 | 
			
		||||
#define CP_FLAG_DRIVING 2
 | 
			
		||||
#define CP_FLAG_NTHREADS 3
 | 
			
		||||
int read_args(
 | 
			
		||||
  int argc,
 | 
			
		||||
  const char* argv[],
 | 
			
		||||
  char** params,
 | 
			
		||||
  unsigned int* driving_force,
 | 
			
		||||
  unsigned int* command
 | 
			
		||||
  unsigned int* command,
 | 
			
		||||
  unsigned int* nthreads
 | 
			
		||||
){
 | 
			
		||||
  int i;
 | 
			
		||||
  int ret;
 | 
			
		||||
  // pointers
 | 
			
		||||
  char* ptr;
 | 
			
		||||
  // flag that indicates what argument is being read
 | 
			
		||||
@@ -109,14 +113,15 @@ int read_args(
 | 
			
		||||
    if(argv[i][0]=='-'){
 | 
			
		||||
      for(ptr=((char*)argv[i])+1;*ptr!='\0';ptr++){
 | 
			
		||||
	switch(*ptr){
 | 
			
		||||
	// timestep
 | 
			
		||||
	case 'p':
 | 
			
		||||
	  flag=CP_FLAG_PARAMS;
 | 
			
		||||
	  break;
 | 
			
		||||
	// nsteps
 | 
			
		||||
	case 'g':
 | 
			
		||||
	  flag=CP_FLAG_DRIVING;
 | 
			
		||||
	  break;
 | 
			
		||||
	case 't':
 | 
			
		||||
	  flag=CP_FLAG_NTHREADS;
 | 
			
		||||
	  break;
 | 
			
		||||
	default:
 | 
			
		||||
	  fprintf(stderr, "unrecognized option '-%c'\n", *ptr);
 | 
			
		||||
	  print_usage();
 | 
			
		||||
@@ -141,6 +146,15 @@ int read_args(
 | 
			
		||||
      }
 | 
			
		||||
      flag=0;
 | 
			
		||||
    }
 | 
			
		||||
    // nthreads
 | 
			
		||||
    else if(flag==CP_FLAG_NTHREADS){
 | 
			
		||||
      ret=sscanf(argv[i],"%u",nthreads);
 | 
			
		||||
      if(ret!=1){
 | 
			
		||||
	fprintf(stderr, "error: '-t' should be followed by an unsigned integer\n       got '%s'\n",argv[i]);
 | 
			
		||||
	return(-1);
 | 
			
		||||
      }
 | 
			
		||||
      flag=0;
 | 
			
		||||
    }
 | 
			
		||||
    // computation to run
 | 
			
		||||
    else{
 | 
			
		||||
      if(strcmp(argv[i], "uk")==0){
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user