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

TigerLake核心间共享数据时CLWB指令的性能特性解析

TigerLake平台下双核心共享数据时CLWB指令的性能特性分析

测试背景

目标为实现双核心(C1、C2)间32KiB缓冲区的高速传输,同时在双核心上并行执行加载与存储操作。采用乒乓模式设计基准测试,让双核心交替操作缓冲区,得到以下实验结果:

  • 实验1(无指令优化):C1平均耗时9615周期,C2平均9624周期
  • 实验2(C1执行CLWB、C2执行PREFETCHW):C1耗时10893周期,C2仅3312周期
  • 实验3(双核心均执行CLWB与PREFETCHW):双核心耗时均约10200周期
  • 实验4(按缓存行奇偶分配CLWB执行核心、双核心均预取):双核心耗时均约6100周期

实验2与实验3的性能差异解析

基于TigerLake(Willow Cove架构)的缓存子系统特性,可从CLWB指令行为、缓存一致性协议两方面解释差异:

1. CLWB指令的核心特性

CLWB的作用是将缓存行的脏数据写回内存,但不会使缓存行失效(与CLFLUSH的核心区别)。执行CLWB后,缓存行仍保留在核心私有缓存(L1/L2)或共享L3中,状态变为干净的独占(E)或共享(S)。

2. 实验2的性能逻辑

  • C1执行CLWB:仅完成脏数据写回,缓存行仍留在C1的私有缓存中,状态转为干净E。
  • C2执行PREFETCHW:提前向缓存子系统请求目标缓存行的独占(E)状态,直接将缓存行加载到C2的L1d缓存。当C2执行存储操作时,无需再发送RFO(Read For Ownership)请求等待总线响应,大幅降低了存储延迟,因此C2耗时骤降。
  • C1耗时略高于实验1,仅来自CLWB本身的写回开销,无额外一致性事务。

3. 实验3的性能逻辑

双核心均执行CLWB会引入两层额外开销:

  • 重复写回开销:每次核心操作完缓存行后,都强制触发写回内存的操作——即使数据很快会被另一个核心修改,完全浪费了缓存的临时存储价值,占用了内存总线带宽。
  • 缓存一致性事务叠加:C1执行CLWB后,缓存行处于干净E状态;C2要执行CLWB前,必须先通过一致性协议将C1的缓存行置为S状态,自身获取E状态,执行CLWB后再次写回。这种来回切换缓存状态的事务,加上两次CLWB的写回开销,直接抵消了PREFETCHW的优化效果,最终耗时接近甚至略高于无优化的实验1。

4. 本质差异总结

实验2仅由完成写操作的核心执行CLWB,另一个核心用PREFETCHW提前获取所有权,避免了重复写回和不必要的缓存状态切换;而实验3中双核心重复执行CLWB,引入了冗余的内存总线事务和缓存一致性开销,导致性能大幅下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:23:10