神威太湖之光 系统分析
内存子系统
0. 推荐阅读
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帮我找到了高级优化技术进阶