首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测量方案中所用时间的最佳方法

测量方案中所用时间的最佳方法
EN

Stack Overflow用户
提问于 2013-09-16 21:18:34
回答 3查看 2.5K关注 0票数 1

我有一种使用过剩的“主回路”。我希望能够测量渲染一个帧所需的时间。用于渲染框架的时间可用于其他计算。函数time的使用是不够的。

代码语言:javascript
复制
(time (procedure))

我发现有一个叫做current-time的函数。我不得不进口一些包裹才能得到它。

代码语言:javascript
复制
(define ct (current-time))

它将ct定义为time对象。不幸的是,我在计划中找不到任何关于日期的算术包。我看到在球拍中有一种叫做current-inexact-milliseconds的东西,这正是我所要寻找的,因为它有纳秒。

使用time对象,可以使用以下方法将其转换为纳秒

代码语言:javascript
复制
(time->nanoseconds ct)

这让我做了这样的事

代码语言:javascript
复制
(let ((newTime (current-time)))
   (block)
   (print (- (time->nanoseconds newTime) (time->nanoseconds oldTime)))
   (set! oldTime newTime))

对我来说已经够好了,除了出于某些原因,它是这样打印的。

代码语言:javascript
复制
0
10000
0
0
10000
0
10000

我正在用opengl渲染东西,我发现很难相信某些渲染循环花费了0纳秒。而且每一个循环都是相当稳定的,稳定的,足够占用相同的纳秒时间。

EN

回答 3

Stack Overflow用户

发布于 2013-09-17 12:26:07

毕竟,您的结果并不令人惊讶,因为我们必须考虑每个系统的有限定时器分辨率。事实上,处理器和OS进程通常都有一些限制。尽管石英振荡器可以达到并超过一纳秒的周期,但它们无法准确地计数。您还受到您所使用的功能的准确性和分辨率的限制。我看过小鸡方案的文档,但是没有类似于(当前不精确-毫秒)的→真实吗?球拍。

票数 0
EN

Stack Overflow用户

发布于 2013-09-21 21:35:45

在深入研究之后,我提出了一个解决方案,我应该用C编写它,并将它绑定到使用绑定的方案中。

代码语言:javascript
复制
(require-extension bind)

(bind-rename "getTime" "current-microseconds")

(bind* #<<EOF
uint64_t getTime();

#ifndef CHICKEN
#include <sys/time.h>
uint64_t getTime() {
    struct timeval tim;
    gettimeofday(&tim, NULL);
    return 1000000 * tim.tv_sec + tim.tv_usec;
}
#endif

EOF
)

不幸的是,这个解决方案并不是最好的,因为它只会是鸡计划。它可以作为一个库来实现,但是一个只包装在任何其他方案上不存在的函数的库是没有意义的。

因为纳秒实际上并没有多大意义,所以我得到了微秒。

注意这里的技巧,定义函数以在上面包装,并防止包含被bind解析。当该文件在Gcc中加载时,它将使用包含和函数定义进行构建。

票数 0
EN

Stack Overflow用户

发布于 2014-12-03 15:49:22

鸡有当前毫秒:http://api.call-cc.org/doc/library/current-milliseconds

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18837493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档