其中计时功能,time,clock getrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的,为了知道在什么情况下我必须使用他们什么是他们的返回值.
首先,我们需要对返回wall-clock值的函数进行分类,与返回进程或线程值的函数进行比较.gettimeofday返回wall-clock值,clock_gettime返回wall-clock值或进程或线程值,具体取决于Clock传递给它的参数.getrusage并clock返回过程值.
然后第二个问题涉及这些功能的实施,因此,它们的准确性.这些功能使用哪种硬件或软件机制.
似乎getrusage只使用内核tick(通常为1ms长),因此不能比ms更准确.这样对吗?然后该getimeofday函数似乎使用最准确的底层硬件.因此,它的准确性通常是近期硬件上的微秒(因为API而不能更多).那么clock,手册页谈的是"近似",它是什么意思?那么clock_gettime,API是纳秒级,是否意味着如果底层硬件允许它,它能够如此准确?单调性怎么样?
还有其他功能吗?
我试图找出datetime和time模块之间的差异,以及每个模块应该用于什么.
我知道这datetime提供了日期和时间.该time模块有什么用?
可以理解的例子和关于时区的差异尤其令人感兴趣.
std::system_clock和之间有什么区别std::steady_clock?(说明不同结果/行为的示例案例会很棒).
如果我的目标是精确测量的功能(如基准)的执行时间,这将是之间是最好的选择std::system_clock,std::steady_clock和std::high_resolution_clock?
我正在尝试将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;
Run Code Online (Sandbox Code Playgroud)
显然,如果你在几秒钟内计算,那段代码就是好的.此外,结果有时候出来很奇怪.
有谁知道在Linux中创建高分辨率计时器的某种方法?
大家好我正在尝试计算php中的已用时间.问题不在于php,而在于我的数学技能.例如:Time In:11:35:20(hh:mm:ss),现在说当前时间是:12:00:45(hh:mm:ss)然后我的公式中的时差给出了输出: 1 :-34:25.它应该是:25:25
$d1=getdate();
$hournew=$d1['hours'];
$minnew=$d1['minutes'];
$secnew=$d1['seconds'];
$hourin = $_SESSION['h'];
$secin = $_SESSION['s'];
$minin = $_SESSION['m'];
$h1=$hournew-$hourin;
$s1=$secnew-$secin;
$m1=$minnew-$minin;
if($s1<0) {
$s1+=60; }
if($s1>=(60-$secin)) {
$m1--; }
if($m1<0) {
$m1++; }
echo $h1 . ":" . $m1 . ":" . $s1;
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
编辑
对不起,我可能不得不补充说,页面每秒刷新一次以显示新的经过时间,所以我必须使用上面的方法.对于没有正确解释,我深表歉意.
基本上,我希望能够输出运行应用程序的已用时间.我想我需要使用某种timeit函数,但我不确定是哪一个.我正在寻找类似以下的东西......
START MY TIMER
code for application
more code
more code
etc
STOP MY TIMER
Run Code Online (Sandbox Code Playgroud)
OUTPUT ELAPSED TIME在计时器的启动和停止之间执行上述代码.思考?
据我所知,Linux的起点CLOCK_MONOTONIC是启动时间.在我目前的工作中,我更喜欢使用单调时钟而不是CLOCK_REALTIME(用于计算)但同时我需要在报告中提供人性化的时间戳(年/月/日).它们可能不是很精确,所以我想加入单调计数器和启动时间.
从这里我可以使用api调用在linux系统上获得这个时间?
我正在编写一个代码,它从服务器每隔1ms接收一次原始以太网数据包(无TCP/UDP).对于收到的每个数据包,我的应用程序必须回复14个原始数据包.如果服务器在每1ms发送一次数据包之前没有收到14个数据包,则服务器会发出警报并且应用程序必须中断.服务器 - 客户端通信是一对一链接.
服务器是硬件(FPGA),以精确的1ms间隔生成数据包.客户端应用程序在具有10G SolarFlare NIC的Linux(RHEL/Centos 7)计算机上运行.
我的第一个代码版本是这样的
while(1)
{
while(1)
{
numbytes = recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);
if(numbytes > 0)
{
//Some more lines here, to read packet number
break;
}
}
for (i=0;i<14;i++)
{
if (sendto(sockfd,(void *)(sym) , sizeof(sym), 0, NULL, NULL) < 0)
perror("Send failed\n");
}
}
Run Code Online (Sandbox Code Playgroud)
我通过clock_gettime在recvfrom呼叫之前采用时间戳(使用)和在呼叫之后采用时间戳来测量接收时间,我打印这些时间戳的时间差并在时间差超过900-1100 us的允许范围时打印它们.
我面临的问题是数据包接收时间是波动的.这样的事情(打印是以微秒为单位)
Decode Time : 1234
Decode Time : 762
Decode Time : 1593
Decode Time : 406
Decode Time : 1703
Decode …Run Code Online (Sandbox Code Playgroud) 我认为没有这样的选择 date
/proc/uptime 是基于引导的,而不是单调的.
最后我发现cat /proc/timer_list | grep now,ktime_get如果我理解正确的话,会产生nsecs的数量,通过它返回单调时间,但这非常麻烦.
update:返回的值必须与返回的值相同clock_gettime
我正在阅读CLOCK_REALTIME和之间的区别CLOCK_MONOTONIC
CLOCK_REALTIME和CLOCK_MONOTONIC之间的区别?
该CLOCK_REALTIME在时间的不连续性,可以跳向前和向后:是,在这个时钟的错误?如何使时间不一致的时钟可靠?
linux ×5
c ×4
time ×4
timer ×3
python ×2
c++ ×1
c++-chrono ×1
c++11 ×1
clock ×1
datetime ×1
gettime ×1
linux-kernel ×1
networking ×1
performance ×1
php ×1
precision ×1
real-time ×1
sockets ×1