时不时会有人跑来问:NVIDIA AGX Xavier或者Jetson TX2显存到底多少啊?
我毫不犹豫地甩给Ta Xavier的规格表:
可是得到的回复往往是...
好把,今天我们来说道说道。
NV的TK1/TX1/TX2/Xavier,都属于一个SoC内部,同时存在CPU部分和GPU部分。我一般叫它们为“APU”类。
这种芯片和常见的你在大机器上看到的独立的CPU和独立的GPU不同,它们只有1个芯片的,是CPU和GPU融合在一起的。
我们台式机上用的GPU卡叫独立显卡。简单说能单独拔出显卡的是一种,不能拔出来的是另外一种。
而NVIDIA嵌入式产品的核心模组就是这种不能拔出来的,因为物理(die)上就是合并在一起的,因此它们也不存在独立的显存和内存,CPU部分和GPU部分公用存储器的。
所以看到以上Xavier的规格里,16GB LPDDR4x之类的,这16GB是CPU和GPU部分公用的。所以既是显存,也是内存。
那么对于编程会有什么影响?
早先NVIDIA的BLog上有提到过,不要使用cudaMemcpy跨PCI-E(实际上不存在)传输, 而是尽量通过unified memory或者zero-copy(传统CUDA)的方式消除cudaMemcpy。 后者稍微慢一点(因为TX2之类的上面的zero-copy访问,会禁用掉CPU和GPU部分的缓存)。因为物理上的存储是统一的,你cudaMemcpy并没有经过实质存在的PCI-E传输,而只是无辜的在这个物理的芯片内无辜的复制了一遍,浪费时间,就地用即可。
在这些特殊的APU上,连cudaMemcpy都可以完全省略,真正的0传输时间(实质上有稍微一点点的时间,微乎其微,用于页表信息或者缓存维护之类的操作,可以无视)。这是为何很多应用,可能再强的GPU(例如RTX2080)都无法比上一个Xavier/TX2之类的原因。
举个例子说:Xavier或者TX2在高速采集来自外设摄像头的信息,或者其他数据,采集速率假设达到了20GB/s,此时它们可以让GPU就地使用这些数据,完成计算。而可能台式GPU永远不可以,因为他们实际能取得的传输到自己显存的速度,因为必须经过PCI-E,只有10GB/s多点。此时将永远无法完成任务,卡在PCI-E传输瓶颈上。这种统一的CPU/GPU一体芯片,无此类问题。
也就是说,我们常说的GPU上的kernel,有计算瓶颈(卡计算)和访存瓶颈(卡显存访问),但是实质上,还存在另外的一种瓶颈,卡在PCI-E传输上。但是这种一般较为少见。因为此时,人们会选择考虑尽量用CPU优化来完成计算。但是万一CPU的处理速度不够呢?此时又不能选择用GPU,因为卡在传输瓶颈上。则可以考虑用Xavier之类。
再看一下这个规格表:Xavier的LPDDR4x内存(显存),理论速率有137GB/s(不是很精确的数字,具体看表),等于说,Xavier的GPU部分,可以用高达100多GB/s的速度,访问CPU部分产生的数据(例如CPU上的某些采集设备和它们的驱动,在内存中产生数据的速度)。
看现在的TX2/Xavier之类的,直接从CPU(SoC)中引出各种高速采集接口。不说Xavier(太贵),TX2这种价格适中,直接节省掉了各种采集卡的钱。
对通信开销的影响
传输延迟有的时候很重要。假设你的PCI-E正好能传输12GB/s,你的台式机需要根据之前采集到的2GB数据运算,做出行动决定(例如控制机器人转动),GPU的光PCI-E传输这2GB,在这个速率下,就过去了166ms,也就是0.166秒,而一体化的CPU/GPU融合设备,这个时间是木有的(只有少量的访存一致性维护开销,可以无视,也就是刚才说的页表,缓存维护之类的),这样就多出来了一个显著的延迟优势。
此外,你台式机往往较重,动弹不了,数据往往需要回传才能用,2GB你怎么回传!就算是0.2GB吧。你计算过通过,哪怕802.11ac回传的时间开销么,这些通信开销,因为TX2之类的融合设备,是可以跟着机器人走的,很轻很小,直接0开销,没有通信的额外延迟代价了。