【发布时间】:2021-12-26 07:59:08
【问题描述】:
我在 for 循环中运行我的程序,向它传递不同的 num_threads 值。
for (( j=1; j<9; j++ ))
do
mpirun -n $j ./my_program
done
我知道 bash 会将返回值存储在 $?自动地。但是,我想要做的是在传递 num_threads=1 的参数时获取并行程序的运行时,这样当 num_threads>1 时,我可以使用这个值来找到运行该程序时的加速。我需要为此返回一个双精度数,并且我曾尝试从 main() 返回一个双精度数:
double main(int argc, char** argv) {
double run_time;
...
return run_time;
}
但似乎 main() 只能返回一个 int,而我从我的 bash 脚本中得到一个 0。
time=$?
echo $time
output:
0
【问题讨论】:
-
也许只是
time mpirun ...? -
那种。这将适用于为整个程序计时。问题是我只需要对程序的特定部分进行计时。它使用 Quicksort 函数,我正在计时调用 Quicksort() 的部分。所以我想我必须在程序本身内计时。
-
程序返回的是退出状态——一个单字节无符号整数。它通常用于指示程序是否成功(零=成功,非零=某种失败)。它不能传递其他类型的数据,并且将其用于成功/失败以外的任何事情几乎总是一个坏主意。
-
@marti :
double main根据 C 标准不仅是非法的,而且没有任何意义。main总是返回一个整数,如果它是小于 256 的整数,你只能依赖它(即取决于操作系统)。如果编译器没有抱怨double,它至少会默默地忽略它。此外,main通常由exit终止,而不是return。我的猜测是return也可以;这里有点不寻常。