在嵌入式软件(固件)领域,通过让 PIO 线摆动并在示波器上捕获其行为来观察事件顺序、计时和优化程序是相当常见的。
在过去,可以通过切换串行和并行端口上的引脚来在基于 PC 的软件上实现几乎相同的功能。这使得在同一跟踪上捕获基于主机 PC 的软件事件和固件事件并检查主机软件/固件交互成为可能。
现在,我的新笔记本电脑...没有串行或并行端口!这种情况越来越多。那么,有人对如何从“现代”PC 发出准确的定时信号有任何建议吗?让我震惊的是,我们没有任何立即可编程、无滞后的输出引脚了。
该解决方案需要在笔记本电脑上运行,因此不允许使用仅插入台式机的附加卡。
我有一个使用 scons 构建的大型 C++ 项目。它的构建速度很慢,我想进行一些更改以使其构建速度更快。现在我想集中时间加速构建中最慢的部分。
如何找出哪些文件的编译时间最长?
我有一大堆R互相调用的函数,它们可能需要很多时间,所以我使用以下方式调用它们system.time:
f1 <- function () {
print(system.time(f1.1()))
print(system.time(f1.2()))
print(system.time(f1.3()))
}
...
f <- function () {
print(system.time(f1()))
print(system.time(f2()))
print(system.time(f3()))
}
Run Code Online (Sandbox Code Playgroud)
然后输出f()看起来像
user system elapsed
129.599 (2.16min) 0.663 (663.00ms) 130.438 (2.17min)
wrote 447,337,021 bytes
user system elapsed
2746.37 (45.77min) 145.299 (2.42min) 2896.68 (48.28min)
user system elapsed
9.544 (9.54sec) 0.755 (755.00ms) 10.3 (10.30sec)
Run Code Online (Sandbox Code Playgroud)
并且需要花费一些时间来弄清楚功能和时序之间的对应关系。
我尝试了这个功能:
verbose <- function (expr) {
ret <- system.time(expr)
cat("<<<<<<")
print(expr)
print(ret)
}
> verbose(Sys.sleep(2))
<<<<<<NULL
user system elapsed
0 (0.00ms) 0 …Run Code Online (Sandbox Code Playgroud) 我正在用 Java 编写一个游戏,并将 FPS 限制为 60。我想出了两种不同的方法来获得相同的结果,但我想知道其中哪一种是更好/更干净的方法。或者也许你有不同的想法。
while(System.nanoTime() - thisFrame < fps_limit);
Run Code Online (Sandbox Code Playgroud)
或者
Thread.sleep(sleepingTime);
Run Code Online (Sandbox Code Playgroud)
我的想法是while 循环对 CPU 的影响大于Thread.sleep,我是对的吗?
在此先感谢您的帮助!
多姆
我最近安装了 macOS 10.15 Catalina 的开发者测试版,它默认使用 ZSH 而不是 BASH。
我已time作为二进制文件安装在 中/usr/bin/time,并使用它来计时我的一些脚本。然而,ZSH 将此作为内置命令。我的问题是我通常用time -p我喜欢的方式格式化其输出,但这在 ZSH 上似乎不可能。
根据man time:
Run Code Online (Sandbox Code Playgroud)-p The output is formatted as specified by IEEE Std 1003.2-1992 (``POSIX.2'').
这似乎不适用于 ZSH 的内置,并且 ZSH 似乎没有使用我安装的time二进制文件:
-p The output is formatted as specified by IEEE Std 1003.2-1992 (``POSIX.2'').
Run Code Online (Sandbox Code Playgroud)
is-mbp-bleggiero% which time
time: shell reserved word
is-mbp-bleggiero% time echo hello; echo $?
hello
0
is-mbp-bleggiero% time -p echo hello; echo $? …Run Code Online (Sandbox Code Playgroud) 我一直在运行一些计时实验,以确定i从alength数组中检索随机元素需要多长时间n,并且发现我的硬件大约需要 log(n)。我试图推断是硬件\架构的哪一点导致了这个,或者可能是负责任的。(理想情况下,可引用的技术参考是我所追求的)。
它是类似于以下内容的 C 代码:
unsigned long long int n; // Some very big number!
double * lookup_table = malloc(sizeof(double) * n); // So big it only fits in RAM
unsigned long long int i = UNIFORM_RNG(0, n); // Integer in [0, n)
double x = lookup_table[i];
Run Code Online (Sandbox Code Playgroud)
关键思想是有一个大数组lookup_table,我将随机需要其条目(因此我可以有信心地预期缓存/页面未命中)。数组太大了,我知道需要从 RAM 中挖掘出该值。
上面的部分代码包含在一个 for 循环中,所以我有一定的信心我正在计时我认为我计时并具有所需的精度。
程序访问 RAM 需要多长时间?(提到 O(1) 和 O(log(n)) 但似乎没有提供任何指向硬件的解释)。
64 位 …
我从事编程语言分析器工作,正在寻找分辨率优于 100 ns 的 Windows 计时器解决方案。
QueryPerformanceCounter应该是一个答案,但在 Windows 10 上返回的频率为QueryPerformanceFrequency10 MHz,在 Windows 7 上甚至更低
GetSystemTimePreciseAsFileTime有 100 ns 刻度/步
RDTSC分辨率优于1ns,但随频率变化
我的目标分辨率至少为 10 ns。
目前最好的解决方案是什么?
如何QueryPerformanceCounter实施?是否可以轻松拆卸并提高分辨率?
是否可以RDTSC在每次频率变化时直接使用并跟踪/中断?
我正在尝试实现一个简单的计时器,它每秒都会连续计数。我正在使用 React 来渲染结果。代码只有几行,从我读过的内容来看是有意义的。它在前 6 秒内正确添加和渲染;然而,它只是在第七或第八之后开始显示随机数,或者计时器变得错误并每隔随机秒更新一次。我的代码如下,我做错了什么吗?谢谢!
import React, {useState} from 'react';
function App() {
const [count, setCount] = useState(0);
setInterval(()=>{setCount(count + 1)}, 1000)
return (
<div className="welcome">
{count}
</div>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud) 我正在优化我的html5游戏引擎以解决性能问题,我想知道渲染过程需要多少时间.所以我得到了一堆渲染函数.它们中的每一个都渲染了游戏的分离部分......比如块,玩家等.
function gameRender() {
var d1 = new Date();
var firstTime = d1.getTime();
// render stuff
var second = d1.getTime();
console.log("Renders took " + (second-firstTime));
}
Run Code Online (Sandbox Code Playgroud) timing ×10
javascript ×2
arrays ×1
benchmarking ×1
c ×1
c++ ×1
canvas ×1
embedded ×1
firmware ×1
frame-rate ×1
game-engine ×1
hardware ×1
html5 ×1
java ×1
networking ×1
performance ×1
r ×1
ram ×1
rdtsc ×1
reactjs ×1
request ×1
scons ×1
thread-sleep ×1
time ×1
zsh ×1