我尝试测量在OMAP ZOOM 3430 MDK附带的TMS32064x + DSP上执行一段代码所需的时钟周期.我看一下DSP芯片的"程序员指南",它说DSP支持clock()功能.
我做的很简单,我就是这么做的
start = clock();
for (i=0;i<100;i++){
/* do something here */
}
stop = clock();
total = stop - start;
Run Code Online (Sandbox Code Playgroud)
然后将"start","stop"和"total"的值放入以前使用ARM处理器分配的共享内存中.然后我只是将它打印到ARM端的屏幕上.
问题是,在我第一次执行时,我总是得到相同的"总"值,然后在我的下一次运行中我总是得到0!"开始"和"停止"值与"总"值一起出现.
最奇怪的是他们似乎遵循了一点点模式!我把输出结果如下:
# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop clock() value = 0x0000f9f9
# ./sampleapp
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop clock() value = 0xf9f9f9f9
Run Code Online (Sandbox Code Playgroud)
显然,clock()运行不正常,但我不确定这是因为我做错了什么,还是因为我的硬件不支持这种类型的东西.任何想法为什么会这样?
我真的不想描述,因为我想要在不同的简单功能上做很多不同的小基准测试.对于我的生活,我找不到一种方法来记录C++中的毫秒数,顺便说一句,我正在使用Linux.
你能否建议以毫秒为单位获取系统时钟的方法(如果我找不到简单的方法,我可以用几秒钟来解决......)以及它们包含在哪个标题中?
如何使用标准库在Python中检索挂壁时间?
这个问题,这个问题表明在Linux上类似clock_gettime(CLOCK_MONOTONIC_RAW)或/proc/uptime最合适的东西.在Windows上,time.clock()具有所需的效果.
我会使用time.time(),但不保证函数单调(和线性)返回增加时间值.
我找到了一些参考资料,最后得到了以下代码:
String[] args = { "/system/bin/cat", "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[1024];
while (in.read(re) != -1) {
System.out.println(new String(re));
result = result + new String(re);
}
in.close();
Run Code Online (Sandbox Code Playgroud)
上面的代码工作得很好,但不是所有的时间.我得到一些报告称,它报告的频率高于SetCPU在某些手机上设置的最大频率.
有没有更可靠的方法来查找Android手机的时钟速度?
这是一个检查Sleep()函数功能的示例pgm.这是一个演示,因为我在我的app开发中使用了这个sleep()和clock()函数.
// TestTicks.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<iomanip>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
int i, i2;
i = clock();
//std::cout<<" \nTime before Sleep() : "<<i;
Sleep(30000);
i2 = clock();
//std::cout<<" \nTime After Sleep() : "<<i2;
std::cout<<"\n Diff : "<<i2 -i;
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我在睡眠功能之前和之后使用clock()来计算时间.由于iam使用sleep(30000),时间差异至少为30000.
我已多次运行此prgm.打印输出为30000,30001,30002.这些都可以.但有时我得到像29999和29997这样的值.这怎么可能,因为我把30000睡眠时钟().
请告诉我原因.
我不确定Windows内核如何处理线程计时...
我说的是DST以及影响Windows机器上时间的任何其他事件.
如果内核使用与用于一天中的时间相同的"时钟",那么何时
(a)有人手动更改一天中的时间,或
(b)与时间服务器的某些同步更改一天中的时间,或
(c)夏令时开始或结束,并且系统已配置为响应这两个DST事件,
等等,
睡觉的线程是否受到任何影响?即,内核是否以程序员无需的方式处理此类事件?
注意:对于非关键应用程序,这可能是谁关心的?情况.
对于关键应用,知道这个问题的答案是,因为重要的可能是一个必须为这样的异常情况进行编程.
谢谢
编辑:我想到了一个简单的测试,我在LINQPad 4中运行.
测试包括让线程进入睡眠状态,在线程进入睡眠状态的同时启动手动计时器,然后(a)将时间提前一小时,然后进行第二次测试,将时间移回两小时......在两次测试中,睡眠时间都没有受到影响.
底线:使用Thread.Sleep,无需担心影响一天中的时间的事件.
这是琐碎的c#代码:
Int32 secondsToSleep;
String seconds;
Boolean inputOkay;
Console.WriteLine("How many seconds?");
seconds = Console.ReadLine();
inputOkay = Int32.TryParse(seconds, out secondsToSleep);
if (inputOkay)
{
Console.WriteLine("sleeping for {0} second(s)", secondsToSleep);
Thread.Sleep(secondsToSleep * 1000);
Console.WriteLine("i am awake!");
}
else Console.WriteLine("invalid input: [{0}]", seconds);
Run Code Online (Sandbox Code Playgroud) 我开发了这个PHP Web应用程序,现在运行了几个月.突然,其中一个用户抱怨他能够登录,但是一旦他点击任何按钮就会终止会话!同样的问题发生在不同的浏览器上.
经过一些测试后,我意识到每次用户点击任何按钮时都会创建一个全新的会话ID,这可能是因为原始会话已过期.
无论出于何种原因,我都瞥了一眼用户的电脑时钟......惊喜!他的时钟在未来3个月!我不知道这件事是否与失败有任何关系,但我确实修好了时钟.它仍然没有用.我删除了所有的cookie.依然没有.所以我重新启动了浏览器 - 然后它再次开始工作!
我得到的关于这个问题的最接近的信息是Shimon Amit对这个问题的回答.好,现在我知道时钟"错误配置"是原因.问题是......我无法控制每个客户的计算机时钟.他们中的一些人将来可能会设置他们的计算机时钟.
我的问题:这有什么解决方案吗?任何诡计?我不希望客户面对这样的错误,因为他们可能会发现它"跛脚"并打破他们对应用程序的信任,即使这不是我的错(在某种意义上).
我们在代码中使用计时器,我只是对它的实际实现感到好奇,是否有计时器
CPU逻辑电路或CPU外部,例如,外部时钟或类似的东西.
如果没有,那么地狱的计时器在哪里?请帮帮我,不需要任何详细的解释
如何制作硬件定时器,只需关注我们所拥有的硬件板上的定时器.
提前致谢 .
我知道有很多关于OV7670的互联网(例如http://forum.arduino.cc/index.php?topic=159557.0),我读了很多关于它的内容,但似乎缺少了一些内容.
首先,我看看我们如何从相机逐像素地读取以构建矩形600 X 480图像的方式,考虑到文档中描述的HREF,VSYNCH和PCLOCK,这很容易理解:http:/ /www.voti.nl/docs/OV7670.pdf.我理解XCLOCK是一个输入,我需要将OV7670作为一种循环控制器给出,RESET可以重置它.
所以在这一点上,我认为通过连接以下引脚可以覆盖这种相机的功能:
从我的角度来看,这种方法的实现类似于:代码:
for each loop function do
write high to XCLK
if VSYNCH is HIGH
return;
if HREF is LOW
return;
if lastPCLOCK was HIGH and currentPCLOCK is LOW
readPixelFromDataPins();
end for
Run Code Online (Sandbox Code Playgroud)
我readPixelFromDataPins()基本上只读了第一个字节(因为我只是测试我是否能从相机中读取内容),它的编写如下:
码:
byte readPixelFromDataPins() { …Run Code Online (Sandbox Code Playgroud) 在Java 8中可以获得微秒吗?Java 8 LocalDateTime类有一个.getNano()方法可以返回nanoseconds,但在Linux(Ubuntu)和OS X(10.11.5)上它只返回milliseconds(当我运行它返回时301000000等于301 milliseconds)并且我真的需要能够获得microseconds.
我知道有可能在我的计算机上获取nanoseconds(因此得到microseconds它),因为javascript方法process.hrtime()返回一个精确的值.
在任何人开始精确与准确的论证之前,我知道线程之间的纳秒是完全不可靠的,不应该用于比较.
编辑:
要清楚,LocalDateTime该类是Java 8类的一部分java.time.
更新:
所以我意识到Javascript process.hrtime就像Java一样System.nanoTime(),实际上与挂钟没有关系,因为它是两个语言之间不同的任意值.
新问题:有没有办法可以解析这些值的时钟时间?IE浏览器.如果我System.currentTimeMillis()和System.nanoTime(),和比较,另一组这些值的我能得到第二组值的实际时间?
我的问题是我需要使用Java和Javascript进行日志记录,并且需要在两者之间都有一致的微秒字段.