当前位置: 首页 > 面试题库 >

如何在Linux中创建高分辨率计时器以测量程序性能?

通迪
2023-03-14
问题内容

我正在尝试比较GPU与CPU的性能。对于NVIDIA GPU,我一直在使用这些cudaEvent_t类型来获得非常精确的时间。

对于CPU,我一直在使用以下代码:

// Timers
clock_t start, stop;
float elapsedTime = 0;

// Capture the start time

start = clock();

// Do something here
.......

// Capture the stop time
stop = clock();
// Retrieve time elapsed in milliseconds
elapsedTime = (float)(stop - start) / (float)CLOCKS_PER_SEC * 1000.0f;

显然,这段代码只有在您数秒的情况下才是好的。而且,结果有时出来很奇怪。

有谁知道在Linux中创建高分辨率计时器的某种方法?


问题答案:

签出clock_gettime,这是高分辨率计时器的POSIX接口。

如果已经阅读手册页,留给你想知道的区别CLOCK_REALTIMECLOCK_MONOTONIC,看到CLOCK_REALTIME和CLOCK_MONOTONIC之间的区别?

有关完整的示例,请参见以下页面:http : //www.guyrutenberg.com/2007/09/22/profiling-code-
using-clock_gettime/

#include <iostream>
#include <time.h>
using namespace std;

timespec diff(timespec start, timespec end);

int main()
{
    timespec time1, time2;
    int temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
    for (int i = 0; i< 242000000; i++)
        temp+=temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl;
    return 0;
}

timespec diff(timespec start, timespec end)
{
    timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}


 类似资料:
  • 问题内容: 我想用Java模拟TCP。 为此,我有多个线程,例如每个TCP连接的发送者和接收者线程。 我的问题是,我想暂停(如Thread.sleep())线程数微秒的时间间隔。这样我就可以模拟流控制,发送者线程将在发送下一个数据包之前阻塞几微秒,同时接收和数据处理线程可以使用CPU。但是我找不到任何执行sleep()或wait()的方法来获得微秒或纳秒分辨率。如何以微秒或纳秒分辨率阻塞(暂停)J

  • 问题内容: 在Windows下,有一些方便的功能,如from 可以创建高分辨率计时器。Linux有类似的东西吗? 问题答案: 在此之前ows-queryperformancecounter-on-osx)有人问过它-但是基本上,您可以使用boostptime函数,或者可以基本实现相同目的的POSIX clock_gettime()函数。

  • 我想用Java模拟TCP。 我找到了System.nanotime()方法,但是没有方法可以在指定的微秒或纳秒内阻塞线程。如果有这样的方法,那么请让我知道。system.nanotime()只是给出了以纳秒为单位的相对时间间隔。 我可以使用System.nanotime()在使用busy-loop的线程中执行纳秒级延迟,但这将浪费CPU时间,而CPU本来可以用于接收数据线程或处理线程。 另一个令人

  • 注意: Adobe Muse 不再添加新增功能,并将于 2020 年 3 月 26 日停止支持。有关详细信息和帮助,请参阅 Adobe Muse 服务结束页面。 Adobe Muse CC 2014.3 中的增强功能 | 2015 年 2 月 Adobe Muse 现在支持运行 Windows 的 HiDPI 显示屏。如果您使用 Windows HiDPI 硬件,就能发现 Adobe Muse 界

  • 如何通过编程创建一个图像/图标/位图,仅使用SE即无库,在Java中显示n个分辨率。 e、 g.一系列解决方案,如 到 分辨率的位置无关紧要,但最好如图所示。 使用自定义颜色/字体?甚至可能只是一行,而不是固体填充?

  • 问题内容: 我已经使用matplotlib绘制了一些实验结果。但是,通过单击图像右侧来保存图片会产生非常差的质量/低分辨率图像。 我正在寻找的示例图:示例图 问题答案: 您可以用来导出到图像文件: 另外,您可以为某些标量值指定参数,例如: