这篇论文使用定量分析的方式,来估计使用不同格式的SpMV在GPU上运算所需的时间,由此可以挑选合适的格式进行计算。
其结果是预测值和实际值较为接近,所以说计算的公式对GPU真实计算情况提供了比较准确的描述。
定量分析的数学基础是Probabilistic Modeling Function(PMF),可以理解为离散变量的概率分布。
设矩阵有N行M列, b i , 0 ≤ i ≤ M b_i,0\le i\le M bi,0≤i≤M表示有矩阵中i个非零元素的行数。bi的分布也就代表了矩阵行稀疏的分布。而矩阵每行的稀疏分布对不同格式,如CSR,HYB(ELL+COO),计算所需时间影响是很大的。比如ELL,如果大多数行非零元都很少且均匀,只有少部分行有很多非零元,那么就会多出巨量的填零。这些填零可以用HYB格式消除,就是说每行大于K个的非零值都用COO存储。不过如何挑选阈值K又成了问题。本文的方法也可以给出阈值K的挑选方法。
计算的过程非常详细,以后需要的时候可以查,这里我直接列出结果,首先是一些变量的定义:
然后是空间分析结果:
其中COO和ELL都给了两个,ELL两个公式都有K,不知道是什么意思。还有这个Ne也没说。
计算时间分析的结果:
这个前面的分析过程还是有点意义的
首先时间分为数据传输时间和计算时间两部分,T=DTT+CT
数据传输时间DTT分为host to device和device to host两部分,host to device传稀疏矩阵和向量,device to host传结果向量。DTT=(size of data)/B,B表示CPU和GPU之间的传输带宽。
计算时间CT也分为两部分,核心计算时间和访存时间(global memory,读和写)。CT=CTC+AM。
核心计算时间CTC也分为两部分,分别是乘法和加法的计算时间CTC=CTCm+CTCa,这两个的比例可以认为是一样的,因为主要是矩阵每一行和向量点乘的计算,这里面乘法和加法差不多一样。
用F代表乘/加的频率,分为整数、float、double三部分,F=Fi+Fs+Fd。
访存AM也分为两部分,读稀疏矩阵和读/写向量。用BW代表GPU的global memory带宽。
A M = ⌈ s i z e o f D S R W ⌉ AM=\lceil\frac{size\ of\ DS}{RW}\rceil AM=⌈RWsize of DS⌉
DS是存在global memory上的data set,会读一次。RW是连续data的长度,并且RW比BW要小。CR是global memory的时钟频率。
最终结果:
COO:
CSR:
ELL:
HYB:
这些公式疑似有点复杂了,不是很想细看。
总结一下,这篇论文使用PMF的数学方法,结合硬件结构,对不同存储结构的SpMV占用空间以及在GPU上的运算时间做出了定量估计,由此可以选出花费时间最少的方式进行计算。该方法的优点是适用性广,对各种稀疏矩阵结构都有较好的估计效果,因为PMF对稀疏矩阵的结构做出了不错的描述。
最后还有一点没提到,就是这个方法运行本身需要的时间多吗?主要的部分是统计每一行的非零元素个数,就可以构建PMF,如果是CSR格式的话,只需要O(num_row)。