1.一种基于GPU的L1最小化问题快速求解方法,其特征在于,基于快速迭代收缩阈值算法,在NVIDIA的Maxwell架构GPU设备上,采用CUDA并行计算模型,并行加速求解L1最小化问题;设计了自适应优化的矢量运算、非转置矩阵矢量乘和转置矩阵矢量乘,并通过合理的CUDA线程分配实现了单个L1最小化问题并行求解器和并发多个L1最小化问题的并行求解器;
所述求解方法的具体步骤如下:
1)根据数据字典的维度和GPU设备的计算资源设置,完成线程束分配设置和线程分配设置;
2)采用32字节对齐填充的方式,保存数据字典至0开始索引的按行存储的矩阵中;传输数据字典和矢量从主机端到GPU设备端,所述的矢量是数据项b和稀疏表示x;
3)同时在主机端上,异步计算FISTA的输入参数;
4)根据需要求解的L1最小化问题的个数,如果仅求解单个L1最小化问题,在GPU设备端上启发调用单个L1最小化问题并行求解器的设置;如果求解并发多个L1最小化问题,在GPU设备端上启发调用并发多个L1最小化问题的并行求解器的设置;
启用单个L1最小化问题并行求解器设的具体方法是:一个GPU设备仅求解一个L1最小化问题,非转置矩阵矢量乘并行设计、转置矩阵矢量乘并行设计和融合矢量操作的流式并行设计由三个CUDA内核函数分别实现完成。
启用并发多个L1最小化问题的并行求解器设置的具体方法是:一个GPU设备能够并发求解多个L1最小化问题;每一个L1最小化问题的求解由一个或多个线程块完成,并且非转置矩阵矢量乘并行设计、转置矩阵矢量乘并行设计和融合矢量操作的流式并行设计仅由一个CUDA内核函数实现;另外,使用CUDA提供的内置函数将数据字典矩阵的访问缓存在只读数据缓存中,提高访问效率。
5)在GPU设备端上,使用自适应优化的非转置矩阵矢量乘并行设计,实现FISTA中的非转置矩阵矢量乘;
6)在GPU设备端上,使用自适应优化的转置矩阵矢量乘并行设计,实现FISTA中的转置矩阵矢量乘;
7)在GPU设备端上,融合剩余的矢量操作,使用流式并行设计,融合方式计算FISTA中剩余的矢量操作;
8)同时在主机端上,异步计算标量值;
9)如果达到收敛条件,停止迭代,传输稀疏表示从GPU设备端到主机端,否则返回步骤
5),继续迭代。
2.如权利要求1所述的一种基于GPU的L1最小化问题快速求解方法,其特征在于:步骤
5)中的非转置矩阵矢量乘并行设计具体是:根据线程束分配设置,自适应优化地分配一个线程束或者多个线程束去计算一个内积,并且利用解的稀疏性来减少计算量;
该并行设计包括如下两阶段归约:
1)第一个阶段中,每个线程块内的所有线程首先协同并行读取连续的部分矢量至共享内存,接着同一个线程束的每个线程完成相应的部分归约操作,然后,利用洗牌指令完成线程束内的归约,并将结果存储在连续的共享内存中,直到全部加载完矢量;
2)第二个阶段中,利用洗牌指令对第一阶段存储的共享内存数据进行归约,计算得到相应的内积结果;
在这个并行设计中,一个线程束包含的线程数量为32;为取得计算一个内积的最优线程束数,提出了如下的自适应分配策略:min w=sm×2048/k/32,满足m≤w
其中w表示分配产生的线程束组数量,线程束组由k个线程束组成,k表示分配给一个内积的线程束数量,如果小于1,取为1,sm表示GPU设备包含的流多处理器数,m表示数据字典的矩阵行数;当k=1时,该并行设计仅需要第一个阶段归约;当k=32时,直接可将矢量加载到寄存器。
3.如权利要求1所述的一种基于GPU的L1最小化问题快速求解方法,其特征在于:步骤
6)中的转置矩阵矢量乘并行设计具体是:根据线程分配设置,自适应优化地分配一个线程或者多个线程去计算一个内积;
该并行设计也包括两阶段归约:
1)第一个阶段中,每个线程块内的所有线程首先协同并行读取连续的部分矢量至共享内存,接着每个线程完成相应的部分归约操作,并将结果存储在连续的共享内存中;
2)第二个阶段,对第一阶段得到的共享内存数据进行归约,计算得到相应的内积结果;
该并行设计采用如下的自适应线程分配策略:
min t=sm×2048/k,满足n≤t
其中t表示分配产生的线程组数量,线程组由k个线程组成,k表示分配给一个内积的线程数量,如果小于1,取为1,sm表示GPU设备包含的流多处理器数,n表示数据字典的矩阵列数;当k=1时,仅需要第一个阶段。
4.如权利要求1所述的一种基于GPU的L1最小化问题快速求解方法,其特征在于:步骤
7)中的流式并行设计具体是:以流式负载方式处理矢量操作中的每个元素项,其中包括软阈值算子,且使用CUDA提供的内置函数,消除分支。