1.一种低显存下的矩阵及其转置快速乘法方法,其特征在于,包括如下步骤:
1)根据获得的矩阵数据,将其按照规定格式存储在文本文件中,采用快速读入模块将矩阵数据读入到内存中;
2)将步骤1)中的原始矩阵传入到显存,并对答案矩阵进行化简、向量化、分组,传入到显存;
3)组内进行并行计算,组间进行串行计算;
4)步骤3)所得到的多个数组进行合并,并与答案矩阵进行转换,输出最终解。
2.根据权利要求1所述的一种低显存下的矩阵及其转置快速乘法,其特征在于,所述步骤1)具体为:
1.1)该矩阵的尺寸为N×D,其中N为矩阵的行数,D为矩阵的列数,矩阵的每个元素的字符最大宽度为l,将其存储到文本文件中,文本文件的第i行存储矩阵的第i行元素,每一行的元素之间采用逗号进行分割;
1.2)快速读入模块首先调用C语言的fopen和fread函数将文本文件全部以字符形式读入,然后根据步骤1.1)得到的N、D、l,采用循环和C语言的atof_函数将矩阵读入到内存,记为M。
3.根据权利要求1所述的一种低显存下的矩阵及其转置快速乘法,其特征在于,所述步骤2)具体为:
2.1)将M矩阵传输到显存;
2.2)由于矩阵乘以其转置的解(记为矩阵A′)仍为一个矩阵,尺寸为N×N,且该矩阵为对称矩阵,因此该矩阵中有效值的个数为 将其化简,只要计算矩阵A′中的 个值即可;
2.3)为了存储着 个值,采用一维数组进行存储,一维数组的长度为
2.4)在实际情况中,N的值通常会远远大于D,因此无法直接将2.3)所述的一维数组传入显存,于是对2.3)所述的一维数组分成G个一维数组,第1到G‑1组的一维数组的长度为第G组的长度为记第k组数组长度为Len(k),第k组的数组为A(k),其中表示对a进行四舍五入;
2.5)遍历G组,在计算第k组之前将A(k)传入到显存,第k组计算完毕后将A(k)传入到内存。
4.根据权利要求1所述的一种低显存下的矩阵及其转置快速乘法,其特征在于,所述步骤3)具体为:
3.1)第k组的第j个元素的值为:
其中M(p+1,t)表示矩阵M的第p+1行第t个元素,M(q+1,t)表示矩阵M的第q+1行第t个元素,其中p、q的值为:其中 表示对a进行向下取整,id的值为:
需要说明的是,由于第k组的值是在GPU中计算的,因此第k组组内的值是并行计算,G个组之间是串行计算。
5.根据权利要求1所述的一种低显存下的矩阵及其转置快速乘法,其特征在于,所述步骤4)具体为:
4.1)经过上述步骤后,得到了G个一维数组的集合,{A(1),A(2),…,A(G)},将G个一维数组合并成一个一维数组记为P,其中P的长度为
4.2)建立一维数组P与矩阵A’的映射关系如下:A′(p′+1,q′+1)=A′(q′+1,p′+1)=P(id′) (5)其中A′(p′+1,q′+1)表示矩阵A′的位于第p′+1行、第q′+1列的元素,P(id′)表示数组P的第id′个元素,id′∈[1,N],p′、q′的定义如下:通过遍历id′,得到对应的p′和q′,最后得到的A′即为矩阵M与其转置的乘积结果。