Shell 带标志的time命令运行带标志的应用程序

Shell 带标志的time命令运行带标志的应用程序,shell,unix,command-line,time,mpi,Shell,Unix,Command Line,Time,Mpi,我试着给我的小程序计时,它使用MPI,我希望输出在一个文件中 我正在尝试的命令是:time--output=rt.txt mpirun-np 2 a.out。但是time和mpirun的标志似乎冲突 有什么办法吗?你确定吗?从二进制时间的手册页 时间选项必须在命令行上显示,然后才能执行命令。 命令行中命令后的任何内容都作为参数传递给 命令 您使用的是哪个时间?注意有一个内置的shelltime,和一个单独的二进制文件。我怀疑您需要使用单独的二进制文件,而不是内置的。只需将其指定为/usr/bin

我试着给我的小程序计时,它使用MPI,我希望输出在一个文件中

我正在尝试的命令是:
time--output=rt.txt mpirun-np 2 a.out
。但是
time
mpirun
的标志似乎冲突


有什么办法吗?

你确定吗?从二进制
时间的手册页

时间选项必须在命令行上显示,然后才能执行命令。 命令行中命令后的任何内容都作为参数传递给 命令


您使用的是哪个时间?注意有一个内置的shell
time
,和一个单独的二进制文件。我怀疑您需要使用单独的二进制文件,而不是内置的。只需将其指定为
/usr/bin/time
(或安装在任何位置)

而不使用时间二进制文件,您听说过
MPI\u Wtime
功能吗?使用
MPI\u Wtime
对应用程序进行计时可以生成整个并行作业执行时间的更精确结果。您可以按如下方式使用
MPI\u Wtime

#include <stdio.h>
#include <mpi.h>
int main(void) {
    MPI_Init(NULL, NULL);
    MPI_Barrier(MPI_COMM_WORLD);
    // Get the program start time after all processes have initialized and synchronized
    double start_time = MPI_Wtime();

    // Do parallel processing here...
    sleep(1);

    // Synchronize all the processes again and find out the total execution time
    MPI_Barrier(MPI_COMM_WORLD);
    double execution_time = MPI_Wtime() - start_time;

    // Print the execution time from the root process
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    if (world_rank == 0) {
        printf("Execution time %lf\n", execution_time);
    }

    MPI_Finalize();
    return 0;
}
#包括
#包括
内部主(空){
MPI_Init(NULL,NULL);
MPI_屏障(MPI_通信世界);
//获取所有进程初始化和同步后的程序启动时间
双启动时间=MPI时间();
//在这里做并行处理。。。
睡眠(1);
//再次同步所有进程并找出总执行时间
MPI_屏障(MPI_通信世界);
双重执行时间=MPI时间()-开始时间;
//从根进程打印执行时间
国际世界排名;
MPI通信等级(MPI通信世界级和世界级);
如果(世界排名==0){
printf(“执行时间%lf\n”,执行时间);
}
MPI_Finalize();
返回0;
}
此程序应打印出关闭此->
执行时间1.0

我使用的是Ubuntu中bash的内置时间。我怀疑这就是你的问题。手册页中的这句话让我觉得语法应该是这样的:mpirun-np 2 a.out>rt.txtwo,谢谢!我确实知道MPI_Wtime,但对于上面的任务,我只需要粗略比较不同数量的处理器(-np x)的执行情况。因此,并不需要确切的时间。但是非常感谢你的代码。以后一定会用的!