本技术涉及计算机架构领域,提出了一种GPU动态内存管理技术,包括:获取GPU处理的目标稀疏矩阵;对该稀疏矩阵执行动态优化,生成多个优化子块矩阵。
背景技术
稀疏矩阵向量乘(SpMV)和稀疏矩阵乘法(SpMM)是在计算科学和工程领域中广泛使用的重要数学运算。在这两种运算中,矩阵被表示为稀疏矩阵,即大部分元素为零。这种稀疏矩阵的特点使得在处理大规模数据时能够有效地节省内存和计算资源。而由于SpMV和SpMM操作的不规则性以及相关存储器存储带宽的有限性,导致在GPU上实现更快并行的SpMV以及SpMM操作具有很大的挑战性,现有技术目前主要通过分块处理稀疏矩阵进行SpMV和SpMM的加速计算。
虽然分块处理稀疏矩阵具备提高密集向量的数据局限性、更容易实现负载均衡以及更加简便和灵活等优势,但是也存在如下问题:
首先,将稀疏矩阵划分为多个较小的分块可以更细腻地分配任务,容易实现负载均衡,但会增加通信开销。
其次,SpMV和SpMM等函数的子块内部的稀疏格式的数据结构通常包括多个数组,现有技术均是将多个数组分别进行Malloc,而由于子块通常很小以及子块通常是稀疏矩阵,所以,每个数组所需要的内存大小实际上很小,都会远小于所申请的内存单元;这导致生成的多个GPU内存单元内部存在巨大的内存碎片,极大的浪费了GPU宝贵的内存资源,同时还很大程度上降低了子块内数据的数据局部性。
最后,在不同品牌的GPU上所造成的空间浪费也不同,比如,在Nvidia GPU上,每次申请分配内存,都是以512B为基本内存单位去进行分配的,在国产DCU上,每次申请分配内存,都是以4KB为基本内存单位去进行分配的,在分块机制下,每个分块内数据结构所对应的数组大小远小于上述提到的基本内存单位;这导致在GPU上对矩阵数据应用分块方法时,会造成在不同品牌的GPU上显示出较大性能差异的现象。
实现思路