买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:南京理工大学
摘要:本发明公开了一种Spark框架下GPU使能的多层次张量CP分解分布式并行加速方法,包括:读取秩为R的大规模高光谱张量数据及因子矩阵参数初始化;利用P‑CPALS方法分布式并行更新每个因子矩阵;计算error,判断本轮迭代是否满足迭代停止条件。本发明通过结合不同并行机制的Spark平台与GPU高性能技术以达到多层次并行计算的效果,探索不同子任务之间的划分机制,合理运用多层次并行的高效计算能力,实现了具有更高效、高可扩展性的密集型张量数据的并行CP分解。
主权项:1.一种Spark框架下GPU使能的多层次张量CP分解分布式并行加速方法,其特征在于,包括以下步骤:步骤1,读取秩为的大规模张量数据,随机初始化因子矩阵,规定因子矩阵的更新次序为,具体如下:(1.1)对于秩为维度为的张量,Spark从HDFS读取到该张量的二进制文件,通过对读取的数据进行维度重排,得到一个维数组;(1.2)根据秩随机初始化因子矩阵,使得;步骤2,利用P-CPALS方法,按照因子矩阵更新循序,固定其他因子矩阵,按照序列更新一个因子矩阵,基于Spark和GPU分别分布式计算和,其中是的模展开,为哈达玛积,表示为矩阵的逆;然后计算;具体如下:(2.1)首先Spark将按行平均切分为份,记录每份在中的起始行位置以及的行数;将,和进行广播;(2.2)对于的计算,将张量按模展开得到,根据的切分方式,相应的对按列切分,第份是的第列至第列形成的矩阵,并通过Spark抽象成RDD,记作YRDD;然后对YRDD执行Map操作,计算;在Map阶段,获取广播变量,和,每个分片调用一个GPU,通过CUDA核函数划分GPU线程来实现每个分片内部的并行计算;在单个GPU的计算中,根据NvidiaGPU的配置,设定一个网格,一个网格里面划分一个线程块,将线程块按照二维划分1024个线程,每个线程执行一个核函数;同时对于每个线程负责的数据按列进行均匀划分,并只记录划分后每一块数据起始列在的位置和相应划分到的列数,分别保存在数组和;初始化一个全为0的分块结果并设置为全局共享;每个线程内部,线程获取当前的线程所在的行和列,其中和分别表示为当前线程块在网格中沿x轴和y轴的坐标,和分别表示为单个线程块中x和y维度上的线程数;循环计算,其中是从0开始自增的循环次数标记,停止条件是等于,其中,表示模n的秩;然后进行__syncthreads同步操作,保证全局同步;待所有线程都完成计算之后得到该分片的结果;待所有的分片都完成后进行reduce操作,得到;(2.3)对于的计算,设置并行度为;在Map操作时,每个分片获取广播变量,,调用GPU并行计算;根据秩的大小,对网格进行划分;如果小于等于32,则设定线程块为个,,对这个矩阵进行按列划分,使用长度为的数组记录每一列在中的起始位置,以及相应分块的,此处的元素都为1;若大于32,则设定线程块为个,,对这个因子矩阵进行按列均匀划分记为,使用长度为的数组记录每一列在中的起始位置,以及相应分块的列数;设定一个记录每个分块的运算结果;每个线程块的线程获取当前的线程所在的行和列,每个线程计算并更新,计算方式为;待所有的分片都完成后进行reduce操作,得到;最后对进行求逆得到;(2.4)计算,并更新广播变量;步骤3,计算,判断本轮迭代是否满足迭代停止条件。
全文数据:
权利要求:
百度查询: 南京理工大学 Spark框架下GPU使能的多层次张量CP分解分布式并行加速方法
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。