You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPU核心间同步延迟测试:AMD与Intel平台rdtsc指令影响差异问询

核心间同步延迟测试:AMD与Intel平台rdtsc监控的差异

我正在开展CPU不同核心间消息同步延迟的测试,具体测量CPU2检测到CPU1修改共享数据所需的时钟周期数。CPU1与CPU2均使用rdtsc指令记录时序,发现AMD与Intel CPU平台的表现存在明显不一致,特寻求相关见解与建议。

测试逻辑

程序包含分别运行在CPU1和CPU2上的"ping"与"pong"两个线程,二者通过轮流递增共享数组shd_data的对应元素实现乒乓循环,最终总运行时间取ts_end-ts_start与tb_end-tb_start的最小值。为测量"ping"操作的平均耗时,我在while循环内添加了rdtsc(tsc_start[loop]);与rdtsc(tsc_end[loop]);两行监控代码,但这两行代码在AMD平台上显著影响了总运行时间:平均乒乓循环耗时从约180周期增至290周期;而在Intel平台上,监控代码完全不影响整体耗时,始终维持在约400周期。

测试代码

#define MAX_LOOPS  10
#define BIDX 0
#define SIDX 15

static volatile int start_flag = 0;
static int shd_data[16];
unsigned long tb_start , tb_end, ts_start, ts_end;
unsigned long gap[12];
unsigned long tsc_start[MAX_LOOPS];
unsigned long tsc_end[MAX_LOOPS];

void* ping(void *args)
{
    int loop=0;
    int old = 0;
    int cur = 0;

    memset(tsc_start, 0, MAX_LOOPS*sizeof(unsigned long));
    memset(shd_data, 0, 64);    // preheat
    while (start_flag == 0) ;   // sync. start

    rdtsc(tb_start);
    while (++loop < MAX_LOOPS) {
        rdtsc(tsc_start[loop]);
        WRITE_ONCE(shd_data[BIDX], shd_data[BIDX]+1);
        do {
            cur = READ_ONCE(shd_data[SIDX]);
        } while (cur <= old);
        old = cur;
    }
    WRITE_ONCE(shd_data[BIDX], shd_data[BIDX]+1);
    rdtsc(tb_end);

    return NULL;
}


void* pong(void *args)
{
    int loop=0;
    int old = 0;
    int cur = 0;
    
    memset(tsc_end, 0, MAX_LOOPS*sizeof(unsigned long));
    memset(shd_data, 0, 64);    //preheat
    while (start_flag == 0) ;   // sync. start

    rdtsc(ts_start);
    while (++loop < MAX_LOOPS) {
        do {
            cur = READ_ONCE(shd_data[BIDX]);
            rdtsc(tsc_end[loop]);
        } while (cur <= old);
        old = cur;
        WRITE_ONCE(shd_data[SIDX], shd_data[SIDX]+1);
    }
    WRITE_ONCE(shd_data[SIDX], shd_data[SIDX]+1);
    rdtsc(ts_end);

    return NULL;
}

实验环境

  • AMD平台:AMD 3910X,编译器gcc-9.4.0
  • Intel平台:Intel i9-9900
  • 已调整两台机器的CPU Frequency Scaling,将CPU频率固定在3.6GHz基准频率

内容的提问来源于stack exchange,提问作者foool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:17:34