小编sti*_*ers的帖子

RDTSCP 是否跨多核单调递增?

我很困惑rdtscp在多核环境中是否单调递增。根据文档:__rdtscprdtscp似乎是基于处理器的指令,可以防止围绕调用重新排序指令。

处理器在每个时钟周期单调递增时间戳计数器 MSR,并在处理器复位时将其复位为 0。

rdtscp肯定会在同一个 CPU 内核上单调递增,但是这个rdtscp时间戳是否保证在不同的 CPU 内核上是单调的?我相信没有这种绝对的保证。例如,

Thread on CPU core#0                   Thread on CPU core#1

unsigned int ui;
uint64_t t11 = __rdtscp(&ui); 
uint64_t t12 = __rdtscp(&ui);  
uint64_t t13 = __rdtscp(&ui);         
                                       unsigned int ui;
                                       uint64_t t21 = __rdtscp(&ui);
                                       uint64_t t22 = __rdtscp(&ui);
                                       uint64_t t23 = __rdtscp(&ui);
Run Code Online (Sandbox Code Playgroud)

以我的理解,我们可以有一个决定性的结论t13 > t12 > t11,但我们不能保证t21 > t13

我想写一个脚本来测试我的理解是否正确,但我不知道如何构建一个例子来验证我的假设。

// file name: rdtscptest.cpp
// g++ rdtscptest.cpp -g -lpthread -Wall -O0 -o …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly multicore rdtsc

3
推荐指数
1
解决办法
189
查看次数

标签 统计

assembly ×1

c++ ×1

multicore ×1

rdtsc ×1

x86 ×1