信息来进行后续的技术说明。博主现在是在牙膏厂里,部分技术和细节不方便讨论,仅就公开资料和网上可以获取的
回到我们问题上来,为什么是CXL。
1. GPU和CPU 数据交互简单例子,我们只关心GPU和CPU之间的数据交互是什么样的。
这里可以看到:
CPU有多个core, 这里举例两个;
Core和Cache连接起来, ring形状的内部总线是传统连接的一种方式,现在有更多的方式,比如Mesh总线连接。
CPU 处理结束数据,数据从CPU->Cach->Memory,如果数据要送给插在PCIe卡槽上的GPU处理,可能还需要送到Nvmem或者其它的Storage.
然后通过PCIe的通道,送到GPU里面,GPU 内部会把数据送到GPU-memory 里,然后送到GPU-DATA Cache. GPU的计算UNIT 会获取到数据,送给不同的Thread去计算处理。
这里看到了吗,如果CPU 处理好的数据暂存在CPU-Cache里,如果能直接通过PCIe或者送到其它通道,送到GPU-Cache,是不是省去了很多中间过程。
或者多点中间处理过程,CPU-Memory 数据直接通过PCIe送到GPU-Memory呢?
传统处理上可能不需要这样的快速通道,但是AI, FPGA 等外围Device和CPU 之间频繁交互最新数据,性能要求就很高了。
那么可以做到我们假设的情况吗?涉及到MEMORY 管理怎么办,设计到CPU 对应的Cache的一致性怎么办。
好了,Intel 大手一挥,简单啊,我来定些语法吧,只要你们GPU 等Device遵守,就能做到MEMORY 统一处理,Cache 和CPU 保持一致性。而且定义的
Cache 是最简化的公开的MESI 一致性要求哦,实现起来很简单,小伙伴们,以后做到CXL 的协议要求,你们的GPU/FPGA...等就能和我CPU 内部数据同步互连了。
2. CXL 在PCIe基础上做了什么调整那么怎么做呢,现在大家GPU 都是通过PCIe方式连接到板子上插槽上,CPU 通过I/O 通道读写数据。
这些不需要大动,就借用PCIe物理通道喽。把PCIe物理通道用上,上层的Link Layer 和Transaction Layer 修改下, 在这里做文章,满足新的要求吧。
物理上长成这样:
大家看到了吗,如果是一个CXL 的GPU 和传统的PCIe GPU , 看不出区别的。
但是,协议变了,CXL 2.0的官方是这样的:
https://www.computeexpresslink.org/download-the-specification
主要是Transaction Layer, 保留了PCIe Layer ,新扩展了CXL.IO, 另外CXL.mem 和CXL.cache Layer.
Link Layer也做了对应扩展.
Physical Layer做了微调。
后面我们展开来说明。