神威太湖之光 系统分析

内存子系统

0. 推荐阅读

Sunway-Taihu-Optimization

Athread

1. 神威太湖之光简介

  • 每个节点有2片SW26010处理器
  • 每片SW26010有4个CGs(核组, Core-Groups)
  • 每个CG有1个MPE(主核, 运算控制核心, Management Processing Element)
  • 每个CG有8x8=64个CPEs(从核, 运算核心, Computing Processing Elements)

讲道理这SW26010确实像把4片PS3上的IBM Cell处理器用胶水糊在了一起

2. Cache

主核存储系统:

存储器 容量
L1 Cache 指令32KB 数据32KB
L2 Cache 512KB

从核存储系统:

存储器 容量
L1 Cache 指令16KB
L2 Cache CG内共享指令64KB
Scratch Pad Memory 64KB

这SPM真的是和Cell处理器一毛一样了,现在我也能感受PS3开发者的恐惧了www

PS: cache是由硬件控制,对程序员不可见,其实我们只需要榨干Scratch Pad Memory

3. 访存延迟

项目 Cycle
主核到L1 4
主核到L2 13
主核到主存 154
主核到LDM 94
从核到主存 177-278
从核到自己的LDM 4
从核到其他核的LDM 10
LDM到主存(DMA方式) 25
从核行广播 14
从核列广播 14

官网的文档,直接说,这部分的描述就是一坨狗屎,还好找到了CPC2018的培训资料

4. 存储模型

SW26010运算核心的用户虚空间分为LDM空间主存空间主存空间进一步可以分为系统区用户连续区用户交叉区

虚空间内存地址 主核 从核 C语言修饰
0x00 0000 0000 系统连续(可Cache) LDM空间 __thread_local __thread __thread_local_fix __thread_local_kernel
0x20 0000 0000 用户私有连续(可Cache) 用户私有连续 __thread
0x4F F000 0000 用户共享连续(可Cache)(只读) 用户共享连续(只读) 不加修饰
0x50 0000 0000 用户共享连续(可Cache)(读写) 用户共享连续(读写) 不加修饰
0x60 0000 0000 用户共享交叉(不可Cache) 用户共享交叉 __thread_group
0x80 0000 0000 核组IO空间 ? ?
0xA0 0000 0000 芯片IO空间 ? ?

OpenACC内存模型:

空间名称 存储位置 OpenACC修饰
主线程数据空间 主存 加速区外定义的变量
加速线程私有空间 主存 private firstprivate
加速线程本地空间 LDM local copy

5. DMA

DMA命令模式

命令模式 代码
单运算核心模式 PE_MODE
广播模式 BCAST_MODE
行模式 ROW_MODE
广播行模式 BROW_MODE
行集合模式 RANK_MODE

好了官方文档的作者估计写到这里饿了,又开始写得不清不楚了,还好我大Google帮我找到了高级优化技术进阶