- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 __rdtscp
内部函数来测量时间间隔。目标平台是 Linux x64,CPU Intel Xeon X5550。尽管为该处理器设置了 constant_tsc
标志,但校准 __rdtscp
会给出截然不同的结果:
$ taskset -c 1 ./ticks
Ticks per usec: 256
$ taskset -c 1 ./ticks
Ticks per usec: 330.667
$ taskset -c 1 ./ticks
Ticks per usec: 345.043
$ taskset -c 1 ./ticks
Ticks per usec: 166.054
$ taskset -c 1 ./ticks
Ticks per usec: 256
$ taskset -c 1 ./ticks
Ticks per usec: 345.043
$ taskset -c 1 ./ticks
Ticks per usec: 256
$ taskset -c 1 ./ticks
Ticks per usec: 330.667
$ taskset -c 1 ./ticks
Ticks per usec: 256
$ taskset -c 1 ./ticks
Ticks per usec: 330.667
$ taskset -c 1 ./ticks
Ticks per usec: 330.667
$ taskset -c 1 ./ticks
Ticks per usec: 345.043
$ taskset -c 1 ./ticks
Ticks per usec: 256
$ taskset -c 1 ./ticks
Ticks per usec: 125.388
$ taskset -c 1 ./ticks
Ticks per usec: 360.727
$ taskset -c 1 ./ticks
Ticks per usec: 345.043
正如我们所见,程序执行之间的差异最多可达 3 倍 (125-360)。这种不稳定性不适用于任何测量。
代码如下(gcc 4.9.3,运行在 Oracle Linux 6.6,内核 3.8.13-55.1.2.el6uek.x86_64):
// g++ -O3 -std=c++11 -Wall ticks.cpp -o ticks
#include <x86intrin.h>
#include <ctime>
#include <cstdint>
#include <iostream>
int main()
{
timespec start, end;
uint64_t s = 0;
const double rdtsc_ticks_per_usec = [&]()
{
unsigned int dummy;
clock_gettime(CLOCK_MONOTONIC, &start);
uint64_t rd_start = __rdtscp(&dummy);
for (size_t i = 0; i < 1000000; ++i) ++s;
uint64_t rd_end = __rdtscp(&dummy);
clock_gettime(CLOCK_MONOTONIC, &end);
double usec_dur = double(end.tv_sec) * 1E6 + end.tv_nsec / 1E3;
usec_dur -= double(start.tv_sec) * 1E6 + start.tv_nsec / 1E3;
return (double)(rd_end - rd_start) / usec_dur;
}();
std::cout << s << std::endl;
std::cout << "Ticks per usec: " << rdtsc_ticks_per_usec << std::endl;
return 0;
}
当我在 Windows 7、i7-4470、VS2015 下运行非常相似的程序时,校准结果非常稳定,只有最后一位的差异很小。
所以问题 - 这个问题是关于什么的?是 CPU 问题、Linux 问题还是我的代码问题?
最佳答案
如果您不确保 cpu 是隔离的,那么还会有其他抖动来源。您确实希望避免在该核心上安排另一个进程。同样理想的是,您运行一个无滴答内核,这样您就永远不会在该内核上运行内核代码。在上面的代码中,我想只有当你不幸在调用 clock_gettime() 和 __rdtscp 之间进行滴答或上下文切换时,这才是重要的
使 s 易变是另一种打败这种编译器优化的方法。
关于c++ - __rdtscp calibration unstable under Linux on Intel Xeon X5550,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101311/
在我们正在开发的定制 Android 设备中,磁力计放置在非常靠近内部扬声器的位置。扬声器中的永磁体会影响磁力计的值。 x、y、z 值已达到磁力计可以报告的最大值。 重新校准可以解决这个问题吗? 是否
我正在学习相机矩阵的东西。我已经知道我可以通过在对象空间的平面上使用四个点来获得相机的单应性(3*3 矩阵)。我想知道我们是否可以得到不在平面上的四个点的单应性?如果是,我怎样才能得到矩阵?我应该看什
当尝试使用此页面中的说明在 Linux 上安装 PDF 转换器 Calibre 时: http://calibre-ebook.com/download_linux 我收到这个错误: # python
我正在使用 Python 和 scikit-learn 处理具有不同分类器的多类分类问题。我想使用预测概率,基本上是为了比较特定情况下不同分类器的预测概率。 我开始阅读有关“校准”的内容,例如在 sc
我尝试通过命令行使用 calibre 将文档转换为 epub,但收到此错误。 Traceback (most recent call last): File "site.py", line 61,
我正在使用 Calibre 从各种新闻源下载提要并将它们发送到我的 kindle。我想知道是否可以使用自定义配方来仅下载标题或内容中包含“魔法”关键字的文章。如果您使用自定义配方并覆盖 parse_f
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography类的一些代码示例,展示了Zhang99ComputeTargetH
本文整理了Java中boofcv.alg.geo.calibration.Zhang99DecomposeHomography类的一些代码示例,展示了Zhang99DecomposeHomograph
本文整理了Java中boofcv.alg.geo.calibration.Zhang99OptimizationJacobian类的一些代码示例,展示了Zhang99OptimizationJacob
本文整理了Java中boofcv.alg.geo.calibration.Zhang99IntrinsicParam类的一些代码示例,展示了Zhang99IntrinsicParam类的具体用法。这些
本文整理了Java中boofcv.alg.geo.calibration.Zhang99CalibrationMatrixFromHomographies类的一些代码示例,展示了Zhang99Cali
我想使用 Matlab Camera Calibrator app ,但我无法确定相机内在函数的主要点,即 c_x 和 c_y(参见 here)是否使用从 1 开始的标准 Matlab 索引(参见 h
作为机械罗盘的用户,我注意到磁力计提供的航向经常偏离 45 度或更多,尽管在这种情况下没有出现校准显示。 如果我在户外测试或使用我的应用程序,我会在罗盘 View 出现时校准磁力计。这行得通,看来这是
我正在尝试为我的程序实现倒计时功能。这是一个秒计时器,所以我使用一个时间间隔为 1.0 秒的 NSTimer 对象来更新 UI。但为了不累积误差(每1.0秒间隔会产生一点延迟),程序会计算当前时间与开
我正在使用 OpenCv 2.4.10 (C++ API) 中的 fisheye::calibrate() 函数来校准鱼眼相机。当我对针孔相机使用标准 cv::calibrateCamera() 函数
所以我使用棋盘和 matlab 相机校准工具箱进行了相机校准。因此,我为该特定 session 获得的内在矩阵如下: 内部矩阵:[349.3601,0,0;0,349.7267,0;258.0883,
我希望能够从 Calibre 程序内部打开 .exe。 http://calibre-ebook.com/ (用Python编码的开源代码) 目前,详细信息窗口将显示用户定义的 URL,该 URL 将
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography.computeHomography()方法的一些代码示例,展示了
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography.getHomography()方法的一些代码示例,展示了Zhan
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography.()方法的一些代码示例,展示了Zhang99ComputeTar
我是一名优秀的程序员,十分优秀!