2011-02-07 58 views
3

我需要对用C/C++编写的数字运算应用程序进行“时间”或基准测试。问题在于,我运行程序的机器通常充满了做类似事情的人,所以CPU始终处于满载状态。在满载的机器中对应用程序进行基准测试

我曾考虑过使用time.h的函数like“一天的时间”(不记得确切的语法,对不起)和类似的东西,但是我担心它们不适合这种情况,是我对?

而bash的程序“时间”很久以前给了我一些错误。

另外问题是,有时我需要得到0.5秒范围内的时间等等。

任何人都有提示吗?

PS:编译器GCC和在某些情况下,NVCC(NVIDIA) PS2:我的基准,我只是想测量的主要功能的两个部分之间的执行时间

+0

`time()`from`time.h`应该做你想做的事... – Christoph 2011-02-07 09:40:22

+0

提到你正在试图用你的基准测试会真的帮助回答。 – 2011-02-07 09:47:32

回答

1

从最近的其他问题来看,您似乎正在使用MPI进行并行化。 假设这个问题在的相同范围内,那么定时应用程序最简单的方法就是使用MPI_Wtime()

从手册页:

这个子程序返回当前 值的时间作为一个双精度浮点 秒点数。这个 值表示从 过去的某个时间点开始经过的时间。这一次在 过去不会改变任务期间的 生活。如果您愿意,您可以将 的秒数转换为其他单位,负责 。

用法示例:

#include "mpi.h" 

int main(int argc, char **argv) 
{ 
    int rc, taskid; 
    double t_start, t_end; 

    MPI_Init(&argc,&argv); 
    MPI_Comm_rank(MPI_COMM_WORLD,&taskid); 

    t_start = MPI_Wtime(); 

    /* .... your computation kernel .... */ 

    t_end = MPI_Wtime(); 

    /* make sure all processes have completed */ 
    MPI_Barrier(MPI_COMM_WORLD); 

    if (taskid == 0) { 
     printf("Elapsed time: %1.2f seconds\n", t_start - t_end); 
    } 

    MPI_Finalize(); 
    return 0; 
} 

这样做的好处是,我们让底层的MPI库处理平台的处理时间的具体方式,虽然你可能想使用MPI_Wtick()确定计时器的分辨率在每个平台上使用。

1

很难进行有意义的比较,从计时运行这么短的时间的程序。通常解决方案是运行多次。

在bash(或/ usr/bin/time)中内置的时间将报告处理器实际使用的时间,这对于挂载的计算机而言会比挂钟时间更有用,但是会有太多的事情要做真正比较细粒度的时机 - 数量级的巨大差异仍将显而易见。

您也可以使用时钟获得rough estimate

#include <ctime> 
#include <iostream> 

struct Timer { 
    std::clock_t _start, _stop; 
    Timer() : _start(std::clock()) {} 
    void restart() { _start = std::clock(); } 
    void stop() { _stop = std::clock(); } 
    std::clock_t clocks() const { return _stop - _start; } 
    double secs() const { return double(clocks())/CLOCKS_PER_SEC; } 
}; 

int main() { 
    Timer t; 
    //run_some_code(); 
    t.stop(); 
    std::cout << "That took " << t.secs() << " seconds.\n"; 
    return 0; 
} 
+0

这看起来非常好,我会去看看,谢谢! – flow 2011-02-07 11:15:13

2

你没有提到你正在使用的编译器,但与GNU的G ++我通常设置-pg标志建立了profiling信息。

每次运行应用程序时,它都会创建一个输出文件,该文件与gprof应用程序一起解析,可以为您提供大量关于性能的信息。

请参阅this的初学者。

相关问题