Shell 带标志的time命令运行带标志的应用程序
我试着给我的小程序计时,它使用MPI,我希望输出在一个文件中 我正在尝试的命令是: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
time--output=rt.txt mpirun-np 2 a.out
。但是time
和mpirun
的标志似乎冲突
有什么办法吗?你确定吗?从二进制
时间的手册页
时间选项必须在命令行上显示,然后才能执行命令。
命令行中命令后的任何内容都作为参数传递给
命令
您使用的是哪个时间?注意有一个内置的shelltime
,和一个单独的二进制文件。我怀疑您需要使用单独的二进制文件,而不是内置的。只需将其指定为/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)的执行情况。因此,并不需要确切的时间。但是非常感谢你的代码。以后一定会用的!