Ian Jauslin
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jauslin <ian@jauslin.org>2022-05-18 23:52:01 +0200
committerIan Jauslin <ian@jauslin.org>2022-05-18 23:52:01 +0200
commit8bce8632c520acea86b4a6b2b7cf3eafe7964124 (patch)
tree583cb335ce38e2c520c3d84483c4e9b7a23be05a /src/main.c
parent199b8f0df5adeaaac4ca2afc2eff5237dfee36c3 (diff)
Multithread fft
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/main.c b/src/main.c
index 904b5bf..5c7baf7 100644
--- a/src/main.c
+++ b/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, &params, &driving, &command);
+ ret=read_args(argc, argv, &params, &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){