说白就是是CPU分两个核心,每个核心对应各自的CCD,9950X3D:两个 CCD 不一样,一个带超大 3D 缓存,一个普通缓存,所以更要区分。
## 什么是片上 NUMA(重点,和你 Excel 转换直接相关)
Windows 会把这两个 CCD 识别成**2 个独立 NUMA 节点**:
- NUMA 节点 0 = CCD0
- NUMA 节点 1 = CCD1
NUMA 规则:
>
> 进程启动时,默认优先把内存分配在**当前进程所在的 CCD 对应的内存**,访问本地内存速度快;
> 如果进程跑在 CCD0,但要访问 CCD1 那边的内存,就要走 Infinity Fabric 跨芯片通信,**延迟变高、性能下降**。
���� 这就是为什么前面建议:
Excel 进程绑定 CCD0 的核心 → 内存落在 CCD0;
Excel 进程绑定 CCD1 的核心 → 内存落在 CCD1;
**避免跨 CCD 访问内存,减少性能抖动。**
## 举个生活化例子
两个独立办公室(CCD0、CCD1),每个办公室有 8 个工位(CPU 核心)+ 自己的文件柜(L3 缓存 + 本地内存)。
- 员工在 A 办公室工位,拿 A 办公室文件:很快(本地访问)
- 员工在 A 办公室工位,要跑到 B 办公室拿文件:要走走廊(Infinity Fabric),慢一点(跨 CCD)
是CPU不是一整块硅片做出来的,是把 2 个独立的小芯片(CCD)封装在同一个 CPU 外壳里面。
R9 9950X = **2 × CCD**,每个 CCD 里面包含:
8 个物理 CPU 核心
配套 L3 缓存
- 内存控制器(这个 CCD 的本地内存访问通道)
# R9 9950X / R9 9950X3D(Zen5 AM5)
两者都是**16 物理核 /32 线程,没有大小核**,全部是性能核心,这一点和 Intel 12/14 代大小核完全不一样!
对你的 Office COM 场景是巨大利好:**不存在 P/E 核调度问题**,16 个物理核全部可以跑 Excel/Word 的 STA 主线程。
## 基础参数
表格
| 项目 | 9950X | 9950X3D |
| --- | --- | --- |
| 架构 | Zen5 4nm | Zen5 4nm |
| 核心 / 线程 | 16 核 32 线程 | 16 核 32 线程 |
| 基频 / 最大睿频 | 4.3GHz /5.7GHz | 4.3GHz /5.7GHz |
| L3 缓存 | 64MB | 128MB(不对称双 CCD:CCD0=96MB,CCD1=32MB) |
| TDP PL1 | 170W,PL2 230W | 170W,PL2 230W |
| 内存 | 双通道 DDR5,最大**256GB** | 双通道 DDR5,最大**256GB** |
| 插槽 | AM5 | AM5 |
| 内部结构 | 2×8 核 CCD,两侧都是普通 L3 | 2×8 核 CCD,**缓存不对称**(重点坑) |
## ✅ Office COM 并发能力(重点)
**最多稳定并发 16 个独立 Office 实例**,1 个实例绑定 1 个物理核心,每个 STA 主线程都是原生性能核,**没有 E 核坑**。
剩余 16 个 SMT 逻辑线程,可以跑调度程序、文件 IO、Excel 内部公式计算、日志。
对比:
- 12900KF:最多 8 个 COM 实例(8P)
- 14900KF:最多 8 个 COM 实例(8P)
- 9950X / 9950X3D:**最多 16 个 COM 实例**
- 双路 Gold6138:最多 40 个 COM 实例
9950X(推荐用于 Office 批量自动化)
- 双 CCD 对称,两边都是 32MB L3,**16 个核心性能一致**;
- 启动 Excel 实例时,只要简单分组:前 8 个绑定 CCD0,后 8 个绑定 CCD1,避免跨 CCD 内存访问延迟;
- 单文档 COM 速度:Zen5 单核很强,**略强于 14900KF**。
9950X3D(Office 场景不推荐)
致命短板:**不对称双 CCD**
CCD0(8 核)带 96MB 3D V-Cache,CCD1(另外 8 核)只有 32MB 普通 L3。
- 如果你把 Office STA 线程跑到 CCD1,**L3 缓存小,大 Excel 读写单元格会明显变慢,任务耗时波动大**;
- 必须写调度脚本,强制把**全部 16 个 Excel 实例拆成两组**:8 个放 CCD0,8 个放 CCD1;
- X3D 的超大缓存优势主要在游戏,**普通 Office COM 读写单元格收益很小**,反而增加调度复杂度。
> 一句话:**做 Office 批量 COM 自动化,优先 9950X,不要选 9950X3D**。
1. 如果你**不做任何 CPU 亲和绑定**:Windows 会自动分配,但**不保证均匀分到 CCD0/CCD1,也不保证每个 Excel STA 主线程独占独立物理核**;负载高的时候会出现:多个 Excel 抢同一个物理核、大量进程被压到同一个 CCD,跨 CCD 内存访问变多,**速度波动大、吞吐量不稳定**。
2. 如果你对**稳定、吞吐可控、减少抖动**要求高(7×24 批量转换):**一定要在启动每个 Excel 实例时,自动绑定 CPU 核心**(程序内部自动做,不用人工干预)。
> 你的场景:**程序会多开 Excel 实例**,跑在 9950X(双 CCD,0~7 CCD0,8~15 CCD1,16 物理核)。
// 启动Excel,绑定到指定核心,返回Excel.Application
private Application CreateExcelOnCore(int coreIndex)
{
// 启动独立Excel进程,/e 静默启动,不打开窗口
var psi = new ProcessStartInfo("EXCEL.EXE", "/e");
psi.UseShellExecute = false;
var proc = Process.Start(psi);
// 等待Excel进程初始化完成
System.Threading.Thread.Sleep(800);
// 绑定到指定物理核心:1 << coreIndex
long mask = 1L << coreIndex;
proc.ProcessorAffinity = (IntPtr)mask;
// Attach到已经启动的Excel实例
Application app = (Application)Marshal.GetActiveObject("Excel.Application");
return app;
}