简体   繁体   中英

How can I get the value of a variable from a C program I've run with a bash script?

I'm running my program in a for loop, passing it varying values of num_threads.

for (( j=1; j<9; j++ ))
    do
        mpirun -n $j ./my_program
    done

I understand that bash will store the return value in $? automatically. However, what I am trying to do is get the runtime for a parallel program when passing it arguments of num_threads=1, so that I can use this value to find the speedup when running this program when num_threads>1. I need to return a double for this, and I had tried to return a double from main():

double main(int argc, char** argv) {
double run_time;
...

return run_time;

}

But it seems that main() can only return an int, and I get a 0 back from my bash script.

time=$?
echo $time

output:
0

Output the value from your program.

int main(int argc, char** argv) {
    double run_time;
    ...
    
    fprintf(stderr, "%f\n", run_time);
}

Then:

for (( j=1; j<9; j++ )); do
    echo -n "$j " >> speed.txt
    mpirun -n $j ./my_program 2>>speed.txt
    # or you want to see it
    # mpirun -n $j ./my_program 2> >(tee -a speed.txt >&2)
done
sort -k2g speed.txt   # -g is from GNU sort

Generally, the form double main(int, char**) is invalid - main has to have specific forms only, see https://en.cppreference.com/w/cpp/language/main_function .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM