问题标签 [rdtsc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3262 浏览

assembly - 在汇编中使用 rdtsc 函数

我正在尝试使用 Ubuntu 12.04 分析 x86 汇编程序。我想使用 rdtsc 功能。问题是,根据评论,我应该得到 rdx 中的周期数,但是使用以下代码,我得到的数字太高:

在调试器中运行它,我在 sub 指令之后的寄存器上得到以下结果:

我无法弄清楚为什么 rdx 中的周期数对于如此简单的指令来说如此之高。rcx 中的数字是否正确?是不是也太高了?

提前致谢

0 投票
2 回答
1991 浏览

assembly - 如何计算 rdtsc 指令执行需要多少个时钟周期?

我知道 unsigned long long 存储在 eax/edx 中,但我想知道如何找出执行单个 rdtsc 指令需要多少个时钟周期?

编辑:这样的东西有用吗?

.globl rdtsc

rdtsc:

rdtsc

movl %eax, %ecx

movl %edx, %ebx

rdtsc

subl %ecx, %eax

subl %ebx, %edx

ret

0 投票
1 回答
2796 浏览

c - 未定义对 rdtsc 的引用

我正在编写创建树的代码和不同的创建树的方法。不过,我似乎无法让 rdtsc 正常运行。

这是我的代码:

假设上面列出的所有函数都得到了处理(当然,除了 rdtsc)。

当我尝试编译时,我收到此错误:

任何想法为什么我会收到这个未定义的参考错误?

0 投票
5 回答
66462 浏览

c++ - 如何从 C++ 获取 x86_64 中的 CPU 周期数?

我在 SO 上看到了这篇文章,其中包含用于获取最新 CPU 周期计数的 C 代码:

C/C++ Linux x86_64 中基于 CPU 周期计数的分析

有没有办法可以在 C++ 中使用此代码(欢迎使用 Windows 和 linux 解决方案)?虽然用 C 编写(并且 C 是 C++ 的子集),但我不太确定这段代码是否可以在 C++ 项目中工作,如果不能,如何翻译它?

我正在使用 x86-64

编辑2:

找到了这个函数,但是VS2010无法识别汇编程序。我需要包括任何东西吗?uint64_t(我相信我必须换成long longWindows ......?)

编辑3:

从上面的代码我得到错误:

“错误 C2400:‘操作码’中的内联汇编语法错误;找到‘数据类型’”

有人可以帮忙吗?

0 投票
1 回答
301 浏览

c++ - 在 C++ 代码中使用嵌入式汇编语言进行错误分析

我找到了这篇关于效率的文章std::vector::push_back,相关代码可以在这里找到。我自己试过了,我得到一个illegal instruction (core dumped), gdb 指示错误发生在第 37 行。

我在一台计算机上使用 gcc 4.7.2 编译:

这里有什么问题?我怎样才能让这个代码工作?我也尝试使用 icpc 13.1.0 但这也失败了。

编辑:我使用的是 Ubuntu 12.10 64 位。

0 投票
2 回答
1565 浏览

c - 组装 rdtsc x64 ubuntu

我正在尝试使用 rdtsc 函数,但我有奇怪的数字。我正在尝试从 C 代码调用此函数并将刻度传回函数。你能告诉我我做得对吗?

汇编代码:

C代码:

0 投票
2 回答
6513 浏览

c - Why should I use 'rdtsc' differently on x86 and x86_x64?

I know that rdtsc loads the current value of the processor's time-stamp counter into the two registers: EDX and EAX. In order to get it on x86 I need to do it like that (assuming using Linux):

and for x86_x64:

why is that? Can anybody explain it to me?

0 投票
1 回答
655 浏览

c - rdtsc() 给出奇怪的结果

我编写了一个非常简单的 C 程序,试图理解 C (Linux) 中的 rdtsc。该程序如下所示。

我的处理器配置如下。

从输出看,处理器的频率是 1.2GHz,据我了解,这意味着每秒会有 1200 x 10^6 滴答声。

当我在我的机器上运行上述程序时,它的输出始终是 88。令人惊讶的是,即使我删除了 'c = (a + b)*11000;' 在两个刻度之间,输出仍然是 88。

1)为什么输出没有增加。(根据执行上述语句所用的周期,它应该显示略高。)

2) 除了 CPU MHz 之外,上面 cpuinfo 中列出的任何其他参数是否会影响这一点。

0 投票
2 回答
134 浏览

c - 读取显示奇怪值的时间戳计数器

我有以下 C 文件 rdtsc.c 演示了在 CI 中使用 rdtsc() 对 64 位版本和 32 位版本都有条件编译。

我从 shell 循环运行上述程序,如下所示。

我得到的输出如下。

由于正在执行相同的操作。我当然希望这些值更接近于 urniform。我如何解释值中的这种差异?

0 投票
1 回答
496 浏览

c - rdtsc 代码显示内存特性(例如 TLB 未命中)对性能的影响

我试图理解 rdtsc() 并且我从http://www.mcs.anl.gov/~kazutomo/rdtsc.html发现了以下代码。解释代码的文本显示为“下一个简短的基准代码可能会向您展示内存特性对性能的一些影响,例如 TLB 未命中、页面错误或页面换入/换出。”。问题是我真的不明白这是如何从内存特性显示性能的。老实说,我不知道。它如果有人能稍微解释一下,那就太好了。