gpt4 book ai didi

c - 测量特定函数的最大和最小执行时间

转载 作者:行者123 更新时间:2023-11-30 17:59:33 25 4
gpt4 key购买 nike

我正在使用两种方法将 x 行相同文本写入文件中进行一些简单的基准测试:

  1. 直接写入。

  2. 创建一个新线程,并通过异步队列进行通信(主线程在一侧插入,另一个线程从另一侧读取)。此方法用于尝试最小化最慢的写入(由于刷新)

这是一段代码,应该给出程序的基本概念:

int i;
char * buf;
int buf_size;
double local_start, local_end, global_start, global_end;
double slowest, fastest;
double local_time_difference;

buf = "A string to be printed to a file \n";
buf_size = strlen(buf);
fastest = MAX_WRITE_TIME;
slowest = 0;

logger_init(atoi(argv[1]));


global_start = get_time();
for(i = 0 ; i < 100000000 ; i++)
{
local_start = get_time();
logger_write(buf, buf_size);
local_end = get_time();

local_time_difference = local_end-local_start;

if(local_time_difference < fastest && local_time_difference != 0)
fastest = local_time_difference;

if(local_time_difference > slowest)
slowest = local_time_difference;

if(i % 10000 == 0)
usleep(1);
}
global_end = get_time();



printf("Fastest: %1.9f\nSlowest: %1.9f\nTotal Time: %1.9f\n", fastest, slowest, global_end-global_start);
logger_destroy();

获取时间过程返回以微秒为单位的时间

double get_time()
{
struct timeval t;
struct timezone tzp;
gettimeofday(&t, &tzp);
return t.tv_sec + t.tv_usec*1e-6;
}

根据传递给logger_init的参数,logger_write将直接写入文件或将其插入队列(队列的大小不得超过某个特定限制)。 GAsyncQueue正在使用

我目前用来计算最快和最慢写入的方法当然有效,但我的问题是:是否有工具或分析器可以为我执行此操作?即给我有关每个函数的统计数据(最大、最小和平均调用)

到目前为止我尝试过但没有成功的工具:

  • gprof
  • 缩放
  • Kcachegrind
  • VTune

TL:DR我正在寻找一个工具来给出特定函数的最小、最大和平均执行时间,而不是总的时间。

最佳答案

  • 使用正确的高分辨率操作系统 API 函数进行基准测试。
  • 不要从测量本身内部计算执行时间,尤其是如果您使用 float 。
  • 为什么要调用 sleep 函数?您是否试图强制进行上下文切换或类似的奇怪事情?操作系统可能会比您的程序更好、更高效地处理此类问题。

关于c - 测量特定函数的最大和最小执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11327963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com