近日微软宣布DirectStorage API已登陆PC,这项技术可以让NVMe SSD绕过CPU和内存,直接向显存传输数据,可大幅降低Windows游戏的加载时间。英伟达、IBM和康奈尔大学也找到了一种方法,可以让GPU与SSD无缝协作,而且不需要专有API。这项功能被称为Big Accelerator Memory(BaM),未来有可能会应用在各种计算任务,对于大型数据类的工作负载会很有帮助。
随着GPU的不断发展,现代的GPU已不再局限于图形方面的应用,还会用在各种重型工作负载上,GPU在可编程性方面也越来越接近CPU,因此也需要直接访问大型存储设备。为了更高效地处理数据,GPU一般都配备了高速的大容量显存,成本非常高,比如基于Ampere架构的新款A100计算卡,配置了80GB的HBM2e显存,速率为3.2 Gbps,提供了2 TB/s的显存带宽。不过随着GPU处理的数据量迅速增长,现有的方式远远跟不上数据处理的需求,优化GPU与存储设备之间互操作性显得更加迫切且重要。
要改进GPU和SSD之间的互操作性涉及一些关键因素。首先,NVMe调用和数据传输给CPU带来了很大的负担,从整体性能和效率来看,这是低效的操作。其次,CPU与GPU之间的不断操作也大大限制了需要大数据量的应用程序所使用的有效存储带宽。TomsHardware表示,Big Accelerator Memory的目标是扩展GPU内存容量,并提高有效的存储访问带宽,同时让GPU更容易地访问扩展内存中的海量数据。
Big Accelerator Memory本质上就是让英伟达GPU能够直接从系统内存和存储设备中获取数据,而且不需要经过CPU的参与。GPU将自身配备的显存作为软件管理的缓存,使用PCIe接口、RDMA和定制的Linux内核驱动程序移动数据,使SSD在需要时直接读写GPU的显存。如果本地没有所需的数据,GPU线程会将SSD的命令排队。Big Accelerator Memory不使用虚拟内存地址转换,因此不会出现TLB缺失等序列化事件。英伟达及其合作伙伴计划将该驱动程序开源,以允许其他人使用BaM概念。
英伟达表示通过Big Accelerator Memory,能让GPU线程按需读取或写入少量数据,这取决于计算情况,由于每次存储访问的数据消耗很小,并且支持高度的线程级并行性,可以有效缓解和控制I/O流量。在GPU上运行BaM基础架构软件可以充分利用底层存储设备,即便使用的是消费级SSD,BaM也会带来具有竞争力的性能优势。Big Accelerator Memory是GPU获得大容量存储池并独立于CPU的一种方式,相比现有的解决方案,新方案使得计算加速器更加独立。
AMD曾在数年前发布了一款GPU与SSD相结合的Radeon Pro SSG,通过额外的存储允许硬件对大型数据集访问进行优化。不过AMD的Radeon Pro SSG纯粹作为图形解决方案,并非为复杂的计算工作负载而设计的,显然英伟达、IBM和康奈尔大学合作的Big Accelerator Memory更进一步。