我也不能理解,一堆KOL都提到了UMA,但苹果这个UMA到底有什么独特之处,却没人能说清。
苹果重新定义一项技术也不是一回两回了,我也希望它能做出新花样,做出好成绩,但大家千万别看到个词就沸腾吧……
UMA不是什么新鲜玩意儿,Intel和AMD玩核显这么久了,也早就有类似的支持了。
UMA到底是什么定义,关键看怎么理解这个A。UM是unified memory没跑了,A却可以是Access,或者Architecture(通常是后者)。
UMA的意义不仅仅是共享主存这么简单。BIOS里预留显存也算共享主存,但显然不太适合叫UMA。
我觉得UMA主要是这几个阶段发展起来的:共享数据,共享地址,共享内存(物理)。
共享数据很简单,OpenGL时代的persistent map,让驱动去做同步、做数据搬运,从而给开发者营造“数据随时可得”的假象(当然也可能的确就是随时可得),这就已经达到共享数据的要求了。
共享地址的难度则增加了一些,其目标是为了让你在CPU上跑的链表能直接在GPU等地方使用。x64时代到来使得内存地址扩充到48位,而且CPU上已经全面虚拟地址,GPU也要跟着加上地址转换的能力。
共享物理内存则明确表明,实现了上两者的独显(OpenCL的SVM就是前两个要求)也要被排除。那就基本是核显Only(主机的架构也可以看作是核显)。
来看一下官网的描述:
M1 also features our unified memory architecture, or UMA. M1 unifies its high‑bandwidth, low‑latency memory into a single pool within a custom package. As a result, all of the technologies in the SoC can access the same data without copying it between multiple pools of memory. This dramatically improves performance and power efficiency. Video apps are snappier. Games are richer and more detailed. Image processing is lightning fast. And your entire system is more responsive.
说白了关键是“without copying it”,也就只是个zero copy而已。
而如果只是zero copy,那就真的是很不稀奇的了:
AMD在2011年就发blog介绍zero copy的强大了,map/unmap只做逻辑上的控制权转移。
Intel晚了一些,2014年才发blog指导大家怎么利用OpenCL的CL_MEM_ALLOC_HOST_PTR
和CL_MEM_USE_HOST_PTR
。(和AMD的是同一件事)。
当然OpenCL2.0带来了SVM,不但可以不用map/unmap,甚至可以CPU/GPU同时操作数据了。
当然具体怎么实现的,不同的硬件有不同的解决办法。可以参考这篇文章:
比如Intel,CPU和GPU都靠ringbus挂在LLC(CPU的L3)上,GPU就像是一个CPU核一样,自然有办法做同步,甚至能在缓存层面共享数据。
内存控制器是在System Agent里的,也挂在ring上,或者说是挂在LLC上,自然CPU和GPU的访存都被同化了(可能更像是LLC发起的访存?)
再比如AMD,GPU和CCX是挂在Infinity Fabric上,GPU相当于NUMA Core,也能靠IF做通讯,只是由于L3是CCX内部的,无法共享而已。
内存控制器也算是依赖着IF的,CPU和GPU的访存也被同化。
XSX其实和APU差不多,只不过GPU是IF的首要使用者而已。
移动端的ARM公版,也是核显,CPU和GPU也挂在一个CCI总线上,访存靠的DMC(dynamic memory controller)。
然后再来看看苹果的图:
我反正没看出什么奥秘,和AMD、ARM的架构图没什么实质区别。
如果你们有内部资料的话,欢迎暗示一些革新之处。
如果没有内部资料的话……你开心就好。
这块我不太懂,但从外观上看,主要是共载板,降低延迟?
仅做推测,M1所带的最高16GB的高速统一内存/UMA(官方口径是:“这种合而为一的高带宽、低延迟mem pool,让各种应用能在CPU、GPU和神经网络引擎间高效地共享数据,从而提高任务处理速度)”。 那么我们算一算SoC上的模块建的搬数带宽就很了不起。并可以猜测M1的mem底层结构不是传统构型的,Mem fabric(mem over fabric) 也许是最可期待的亮点;
可能体现在:各种xPU通过高速fabric访问mem pool,那就是多通道了,加上不必与CPU同步时序,那么集成显核的传统瓶颈也就因此弱化甚至不存在了;以及在此基础上做到了mem pool一体化,推想未来可能有机会演进SCM结构咯;
展开点说,我们知道PC上的显存共享是按地址划分,即使双通道,GPU还是受制于总线访问速度,还要跟CPU分时序…,倘若用高速fabric,则xPU之间的工作频率甚至不需要同步了(SerDes本身不受总线频率驱动 也不传送时钟信号)。当然,有关fabric细节是不会披露的设计秘密,特别是底层PHY,其中还包括各种xPU访问的topology/ 时序/ 冲突解决机制等等;
目前,只能猜测它的多通道topology,那么多xPU能够异步大带宽工作的话就很不易(总线只是对CPU而言,GPU和NPU可以是单纯数据驱动的),所以mem pool底层设计就可能大有文章。简单举例,GDDR4比DDR4快一倍,倘若在传统设计里,GPU和CPU一旦要共享mem,理论上GPU就是降半速运行,这是挂传统总线的弊端,只能有一个时钟;那么倘若是fabric,可能突破点就在于允许xPU工作在不同时钟上,这样GPU就不必降速了。
当然,类似的Mem fabric和内存分频访问技术也广泛运用在Intel/AMD/Nvidia的设计中,比如传统Ringbus/Mesh,以及AMD的Infinity Fabric(还用来link chiplets)等,CPU和xPU挂在这些fabric上面,划分各自的时钟域(地址范围),没有什么CPU/GPU的频率约束;虽然它们都是为了大幅提升xPU载入大型数据集的速度,减轻CPU I/O的瓶颈,提升I/O带宽和传输数据的量;但多数都与UMA这种整体内存空间共用共分配的模式不同,通常意义的UMA与内存共享池的根本差异,在于内存空间的所有权以及其服务的方式;那么其中topology/ 时序/ 冲突解决机制,甚至fabric的底层PHY等等细节就是M1不会披露的设计亮点。
此外,过往惯例上讲,增加了那么多cache/buffer的代价是指令周期得加,不提高频率的话,个别操作也许就显得慢(比如高IPC的任务 - 但是M1是降频加了超宽的8发射架构来支持高IPC),当然升频的话相信流水线也会增加;且PC这个form factor要严肃考虑向后兼容性了,手机则不必考虑。
上述的推测,在Apple几位SVP的解释中可以得到佐证,包括Johny Srouji和主持软件工程的SVP Craig Federighi的口述:“UMA本质上是指所有的组件——CPU、GPU、NN处理器(NPU)、图像信号处理器(ISP)等——共享一个速度极快的Mem pool,并且位置非常接近;这与常见的桌面范例相反,比如把一块内存池分配给CPU,另一个分配给另一边的GPU。而M1使用统一化的内存架构,不需要不断地来回移动数据,也减少重复的数据存储,也不需要改变格式来减慢速度。性能就有很大的提升……M1可以移动到极快的片上内存,然后执行一个巨大的操作序列。这是极高带宽效率的方式。”
另外封装方面:其他位的作者也说过,M1这种在有机封装中嵌入DRAM的封装方式对Apple来说已经习以为常;从A12开始就一直在使用这种方式。当涉及到高端芯片时,Apple倾向于使用这种封装而不是通常的智能手机POP,因为这些芯片在设计时考虑到了更高的TDP。所以将DRAM放在这颗CPU的旁边,而不是放在其上,这样有助于确保这些芯片仍能得到有效冷却。这也意味着,几乎可以肯定M1上的128位DRAM总线,与上一代a-X芯片非常相似。
当然上述仅仅猜测,具体看未来的分析报告吧;当然TSMC知晓的信息只会更清楚。