- 英文标题:Performance Modeling of the Sparse Matrix-vector Product via Convolutional Neural Networks
- 中文标题:稀疏矩阵向量积的卷积神经网络性能建模
- 论文下载链接:DOI@10.1007
- 项目代码地址:GitHub@SpMV-CNN
序言
这其实是一件很有趣的事情,假设 A ∈ R m × n A\in\R^{m\times n} A∈Rm×n,以及 x ∈ R n x\in\R^n x∈Rn,现在想要计算 A x Ax Ax,显然我们正常来算的话需要进行 m n 2 mn^2 mn2次乘法,并且需要 x x x中的每个元素需要被重复检索 m m m次。
现在有一个好消息和一个坏消息:
- 好消息是矩阵 A A A一定会是一个稀疏矩阵;
- 坏消息是我们并不知道 A A A到底是怎么个稀疏法,非零元的位置每次来得都千奇百怪,且 m m m和 n n n都大的离谱;
于是问题就来了,既然是一个稀疏矩阵,我们当然不需要总是重复的检索 x x x的每个位置的元素(只需要检索矩阵 A A A中非零元所在列索引对应的 x [ i ] x[i] x[i]即可),并且如果我们可以做缓存的话,就可以大大地加快运算速度。
可惜因为上面那个坏消息,我们并不知道 x [ i ] x[i] x[i]在被用了一次后,到底还会何时再被用到(非零元分布不规则),因此如果做了缓存,可能也只是增大空间开销,得不偿失。
这件事情其实再【数值分析×机器学习】使用CNN进行雅可比预条件子的生成(烦)给出了一个办法,就是将稀疏矩阵转换成雅可比快,因为同一个雅可比块内的非零元相对集中,这样就使得缓存命中率大大提高,运算速度就会提升。
本文却做了一个看起来很奇怪的任务,就是去预测某个稀疏矩阵 A A A在给定的硬件环境下到底做 A x Ax Ax需要运算多长时间。但是这个任务还是很有意义的,这至少可以做一个先验,如果时间太久的话可能就会需要一些预条件子的介入,如果不久的话就可以省略预处理的步骤。
总的来说其实还是个挺简单的事情,可以考虑做这个方向。
P S \rm PS PS:
开始进入无事一身轻的状态。可惜天真的热,跑不动了,好在月头已经分别完成 10 k m 10\rm km 10km p b \rm pb pb和历史第三长的耐力跑了,好好休整吧。
搞个运动手环,看看自己心肺承受的极限在哪里。
今天还是没忍住中午去 801 801 801看了一下,其实只是想去隔壁休息室开空调躺沙发睡一觉,离开时路过 801 801 801还是无可避免地看到了,天热了还是那件衣服。
唉,眼不见心不烦吧,也见不到几次了。
摘要 Abstract
- 对稀疏矩阵向量乘法(sparse matrix-vector multiplication,下简称为SpMV)在目前的CPU架构上进行建模是非常复杂的,原因有以下三点:
- 非常规的内存访问(irregular memory accesses);
- 间接的内存查询(indirect memory referencing);
- 低算术强度(low arithmetic intensity);
- 虽然解析模型(analytical models)可以生成缓存命中与丢失(cache hits and misses)的精确估计,但是这些模型往往无法精确预测总运行时间。
- 本文利用卷积神经网络(convolutional neural networks,下简称为CNNs)来提供对于SpMV运算操作性能的有效估计(区别于传统的解析方法)。
- 本文针对问题矩阵(problem matrix)展示一种稀疏模式(sparsity pattern)的高级抽象概念(high-level abstraction),并提出一个块级的策略(blockwise strategy)给CNNs模型进行输入(即输入一块块非零的元素)。
- 本文的实验评估是基于SuitSparse Matrix数据集进行的训练与测试,实验结果表明CNNs模型在预测SpMV上的性能具有鲁棒性。
- 关键词:
- 稀疏矩阵向量乘法(Sparse matrix–vector multiplication,SpMV);
- 性能建模(Performance modeling);
- 监督学习(Supervised learning);
- 卷积神经网络(Convolutional neural networks,CNNs);
引入 Introduction
-
SpMV是科学计算与工程应用中常常进行的操作,如在稀疏线性系统的迭代求解算法(如 GMRES \text{GMRES} GMRES,共轭梯度)中就会大量涉及稀疏矩阵的运算。一些在数据分析处理中的应用,比如网页搜索引擎,信息检索等。
-
备注:
这里其实倒是和自然语言处理(Natural Language Processing,下简称为NLP)有点关联,简单举例比如给定一个文档库的词袋(wordbag)矩阵(即正向索引),即标注每个单词在每个文档中的出现次数,这样一个矩阵一般来说会是一个非常稀疏的矩阵,因为常用单词是非常少的,一般来说这种矩阵中非零元的数量不到 1 % 1\% 1%,一些相关的训练矩阵与测试矩阵可以在LIBSVM Data: Regression上找到,比如链接页面上的E2006-tfidf数据集就是一个非常典型的稀疏矩阵,如果我们在这种大规模的稀疏矩阵上执行最小二乘的迭代求解算法,如果使用矩阵的全量表示,一般来说是不太切实际的。
-
-
上述这些应用中,SpMV核是时间耗用最大的一个元素,如何估计SpMV的执行时间是困难的,难点正如摘要中提到的那样,这里做进一步的解释:
-
非常规的内存访问(irregular memory accesses);即低时间局部性(low temporal locality);
-
间接的内存查询(indirect memory referencing);即低空间局部性(local spatial locality);
-
低算术强度(low arithmetic intensity);
The arithmetic intensity is defined as the ratio of total floating-point operations to total data movement (in bytes)
-
备注:
关于时间局部性与空间局部性的定义可以参考时间局部性和空间局部性;
在CPU访问寄存器时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。
- 时间局部性:被引用过一次的存储器位置在未来会被多次引用。
- 空间局部性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
这个东向似乎很难理解,笔者是这样理解的,下面是一个生成 1000 × 1000 1000\times 1000 1000×1000的稀疏矩阵 X X X(稠密度为 1 % 1\% 1%):
import numpy as np import scipy.sparse as ss import matplotlib.pyplot as plt num_col = 1000 num_row = 1000 num_ele = 10000 a = [np.random.randint(0, num_row) for _ in range(num_ele)] b = [np.random.randint(0, num_col) for _ in range(num_ele - num_col)] + [i for i in range(num_col)] c = [np.random.rand() for _ in range(num_ele)] rows, cols, v = np.array(a), np.array(b), np.array(c) sparseX = ss.coo_matrix((v,(rows,cols))) X = sparseX.todense() print(sparseX.shape) print(sparseX.count_nonzero()) print((np.dot(sparseX.T, sparseX).count_nonzero()))
笔者想测试的事情是 X ⊤ X X^\top X X⊤X中稠密度如何,多次测试之后会发现 X ⊤ X X^\top X X⊤X中包含的非零元大约是 X X X中非零元的 10 10 10倍,即稠密度为 10 % 10\% 10%左右,这个事情就很有意思了,SpMV可能会使稀疏矩阵变得不稀疏,这种现象是很不好的,因为会极大的增加内存占用。而稀疏矩阵的全量表示在存储空间上是很不连续的,且很可能在多次运算迭代后稀疏矩阵的样子会变得很大(非零元位置变化),这可能是上述低时间局部性与低空间局部性的一种理解。
看到后面笔者又有了新的理解,考察 y = A x y=Ax y=Ax,其中 A A A是一个稀疏矩阵,那么事实上在做乘法时相当于是将矩阵 A A A的每一行与 x x x相乘,因此 x x x会被频繁的查询,但是我们不可能说将 x x x的每一个元素都缓存,只有那些一段时间内被经常用到的 x [ i ] x[i] x[i]才会被缓存,但是由于稀疏矩阵实在是太不规则,每一行的非零元位置迥异,因此很多时候缓存的 x [ i ] x[i] x[i]很久都没有被用到,然后就被丢弃了,或者就是过了很久才被用到,那时候已经不在缓存中了。其实上一篇雅可比预条件子就是将稀疏矩阵转换为块状,这样就可以使得缓存命中的几率大大增加,因为同一雅可比块是相邻的若干行,这些行的非零元位置是相似的。
-
-
相关研究:
-
参考文献 [ 3 ] [ 4 ] [3][4] [3][4]发现典型的序列式SpMV实现方法总体上不超过商用微处理器上的机器峰值浮点速率的 10 % 10\% 10%(就是很慢呗);
最好的情况下,SpMV在FP32上的算法强度为 0.5 0.5 0.5,这意味着算法性能主要受制于目标频台的峰值内存带宽(peak memory bandwidth);
其他对SpMV的性能有贡献的是非零稀疏模式(nonzero sparsity pattern)与稀疏矩阵的行密度(row-density in the sparse matrix);
-
参考文献 [ 5 ] [ 6 ] [ 7 ] [5][6][7] [5][6][7]对SpMV的性能进行建模,这些解析式的模型,常常依赖于简化缓存替代策略与算法开销,总体上只能提供算术运算和内存占用的理论估计;
-
参考文献 [ 8 ] [8] [8]指出这些分析需要对处理器有较深的理解以及对于SpMV的实现有详细地分析;
-
-
本文希望通过机器学习方法来(具体而言即使用CNNs)来捕获空间依赖与时间依赖;具体而言:
- 使用CNNs来对SpMV的执行时间进行建模(硬件为Intel Xeon core,存储格式为CSR);
- 使用块级实现(blockwise realization)来使得CNNs模型架构可以独立于稀疏矩阵的维度,从而有利于增加训练集与验证集的样本容量;
- 对基于CNNs的模型进行精确度评估以及鲁棒性论述,测试集来自真实应用(SuiteSparse Matrix collection)中的一个代表子集(representative subset);
- 将CNNs模型移植到ARM架构上对该模型的可扩展性进行了评估;
2 背景 Background
本节简要回归SpMV核(kernel)以及CNNs的一些知识,这些概念是本文提出的用于估计SpMV时间耗用的CNNs模型的基础。
2.1 稀疏矩阵向量乘积 The sparse matrix-vector product
-
考察SpMV运算: y = A x y=Ax y=Ax,其中 A ∈ R m × n A\in\R^{m\times n} A∈Rm×n是稀疏矩阵,其中包含 n n z nnz nnz个非零元;
x ∈ R n × 1 x\in\R^{n\times1} x∈Rn×1是一个稠密的输入向量, y ∈ R m × 1 y\in\R^{m\times 1} y∈Rm×1是稠密的输出向量;
一般来说矩阵 A A A会以压缩格式存储,比如压缩稀疏行(Compressed Sparse Row,下简称为CSR),压缩稀疏列(Compressed Sparse Column,下简称为CSC),以及COO或ELLPACK等,本文使用的压缩格式为CSR,如 Figure 1 \text{Figure 1} Figure 1所示:
- v v a l vval vval数组长度为 n n z nnz nnz,按照行优先的顺序依次记录所有非零元的数值;
- v p t r vptr vptr数组长度为 n + 1 n+1 n+1, v p t r [ i + 1 ] − v p t r [ i ] vptr[i+1]-vptr[i] vptr[i+1]−vptr[i]的数值代表第 i i i行有多少个非零元;
- v p o s vpos vpos数组长度为 n n z nnz nnz,记录每个非零元的列索引;
备注:暂时没有搞明白 n n z nnz nnz是什么东西,可能是作者勘误。好了,搞明白了,就是 number of nonzeros \text{number of nonzeros} number of nonzeros的意思… 艹
-
Algorithm 1 \text{Algorithm 1} Algorithm 1中展示了CSR的存储格式下SpMV核的实现:(其实就是怎么计算 y = A x y=Ax y=Ax)
2.2 卷积神经网络 Convolutional neural networks
本节内容略,主要是在讲卷积神经网络的最基础的知识,没有提到在数值计算领域的应用。
3 使用卷积神经网络建模稀疏矩阵向量乘法 Modeling SpMV using CNNs
- SpMV的内存受限(memory-bound)本质是源于矩阵 A A A中低密度的非零元以及不规则的稀疏模式(irregular sparsity patterns),从而导致大量的缓存丢失(cache misses)。
- 考虑到这一点, v p o s vpos vpos数组就显得非常重要(因为它存储了每个非零元的列索引,对应的就是 x x x的索引,我们期望能够将那些列索引相似的行集中到一起处理,这样对 x x x的缓存就变得有意义了)。
- 我们期望通过CNNs可以捕获到 v p o s vpos vpos数组中有用的特征,比如非零元之间距离的模式(pattern),这就可以通过每秒浮点运算速度/每秒峰值速度(float-point operations per second,下简称为FLOPS)与缓存命中/丢失(cache hits/misses)之间的关系生成对于SpMV的性能评估。
3.1 方法论 Methodology
-
Figure 2 \text{Figure 2} Figure 2刻画了本文提出的用于解决SpMV建模的方法论:
-
目的是设计一个CNNs模型,模型输入为 v p o s vpos vpos数组;
然而考虑到稀疏矩阵 A A A可能在形状以及非零元的数量( n n z nnz nnz)上存在较大差异,本文提出将 v p o s vpos vpos数组划分为块状(大小为 b b b的块),以便于设计一个输入大小为常数的CNNs模型,这样模型即可无视稀疏矩阵的大小以及非零元的数量( n n z nnz nnz);
-
设 t i t_i ti是矩阵 A A A第 i i i个块上每个非零元的执行时间,则矩阵 A A A的总执行时间 T t o t a l ≈ b ∑ i = 1 s t i T_{\rm total}\approx b\sum_{i=1}^st_i Ttotal≈b∑i=1sti,其中 s = ⌈ n n z b ⌉ s=\left\lceil\frac{nnz}b\right\rceil s=⌈bnnz⌉;
我们依次将 v p o s vpos vpos的每个块输入训练好的CNNs模型,根据模型输出可以得到对应每个块的执行时间;
-
若 b b b无法被 n n z nnz nnz整除,则最后一块 b ′ < b b'<b b′<b直接丢弃掉即可;
本文的稀疏矩阵的 n n z nnz nnz总是大于 5 M 5\rm M 5M,因此设定 b = 5000 b=5000 b=5000,因此至多有千分之一的块会被丢弃;
-
-
由于对 v p o s vpos vpos进行了分块,因此 Algorithm 1 \text{Algorithm 1} Algorithm 1中基于CSR的SpMV算法需要进行调整:
-
这种调整是用于为CNNs模型生成训练集,因为 v p o s vpos vpos的每一块都必须标注其对于每个非零元的执行时间;具体而言,输入矩阵 A A A可以分解得到 v p o s vpos vpos数组的 s s s个块以及它们对应的每个非零元的执行时间( t [ n n z ] t[nnz] t[nnz]);
-
具体的调整后的块级算法见 Algorithm 2 \text{Algorithm 2} Algorithm 2:
- Algorithm 2 \text{Algorithm 2} Algorithm 2中对于每个块,算法计算非零元与向量 x x x中的对应位置元素的乘积,最终结果存储在输出向量 y y y中(第 14 14 14与 21 21 21行);
- Algorithm 2 \text{Algorithm 2} Algorithm 2中的计时部分为第 11 11 11行到第 20 20 20行;
-
3.2 网络架构 Network architecture
- 本文的CNNs模型是一个回归模型,而非预测模型;
- 本文的CNNs模型参考自若干先进的架构,如AlexNet,LeNet,VGG;
- 本文的模型架构表示:C表示卷积层,P表示池化层,因此可以用CPCP,CCPCCP来表示模型架构;
- 本文考虑使用dropout层来减少过拟合,一些情况下,正则化层会用在最后一个卷积层与池化层间来进行激活调整;
- 本文在网络的第二部分,使用全连接层(fully-connected,下简称为FC)来集中所有从CNNs部分中输出得到的特征,最终由FC进行最终的模型输出;
- 本文最终的设计两种不同的CNNs的架构:CNN-R1(CPCP)与CNN-R2(CCPCCP);
4 实验评估 Experimental evaluation
本节中将描述以下几项事宜:
- 训练集与测试集的生成;
- 本文提出的CNNs模型的超参数搜索(hyperparameter search);
- 模型训练过程,模型性能分析(根据验证集精确度以及损失函数相关的指标);
- 测试集评估结果;
- 模型的迁移;
-
实验硬件环境:
- The compute node where the networks were trained consisted of two Intel
Xeon E5-2698, with a total of 40 cores clocked at 2.20 GHz, and four
NVIDIA Tesla P100 GPUs with 16 GB of DRAM at 1.48 GHz intercon-
nected via NVLink. - The execution times corresponding to the SpMV operation were obtained first
on an Intel Xeon E5-2630 core at 2.40 GHz, hereafter referred to as HaSwell.
To test the model migration technique, the SpMV operation was then re-run
on an ARM Cortex-A57 core at 2.00 GHz embedded on a NVIDIA Jetson
TX2, hereafter a57.
- The compute node where the networks were trained consisted of two Intel
-
实验软件环境:
- Keras v2.2.4 \text{Keras v2.2.4} Keras v2.2.4
- TensorFlow r1.10 \text{TensorFlow r1.10} TensorFlow r1.10
- Hyperas v0.4.1 \text{Hyperas v0.4.1} Hyperas v0.4.1
- 最终的 ad hoc(点对点) SpMV \text{ad hoc(点对点) SpMV} ad hoc(点对点) SpMV基线模型是通过 C \rm C C实现,编译器为 GCC 5.3.0 \text{GCC 5.3.0} GCC 5.3.0, optimization flags \text{optimization flags} optimization flags为 usual \text{usual} usual;
-
模型训练与评估的流程图如 Figure 3 \text{Figure 3} Figure 3所示:
- 先输入大小为 b b b的训练块进行超参数选择;
- 然后在训练块上进行训练;
- 然后在测试块上进行测试;
- 最后进行统计分析;
4.1 数据集获取 Obtain the dataset
-
训练集与测试集都是通过 Algorithm 2 \text{Algorithm 2} Algorithm 2生成得到的。
-
本文在SuiteSparse Matrix Collection(参考文献 [ 18 ] [18] [18])中选择 173 173 173个稀疏矩阵,非零元的数量在 1 M \rm 1M 1M到 10 M \rm 10M 10M之间。
其中 108 108 108个用于训练,剩余 65 65 65用于测试,用于训练的部分中,划分出 20 % 20\% 20%作为验证集。
-
本文测试了不同的块大小( b ∈ { 250 , 500 , 750 , 1000 , 3000 , 5000 } b\in\{250,500,750,1000,3000,5000\} b∈{250,500,750,1000,3000,5000}),这样就可以生成大小不同的训练集,之所以不用 b < 250 b<250 b<250的数值,原因是此时执行时间会受inherent cache data locality effects影响而产生偏差。
4.2 模型建立与调优 Building and tuning the models
- 详见 T a b l e 1 \rm Table\space 1 Table 1,不做赘述,算是非常简单的模型了。
- 值得注意的是倒数两行的百分数,这些是给定超参数被 Hyperas \text{Hyperas} Hyperas选择的次数的百分数,称为percentage of choice,这个笔者也不是很熟,可能需要去看一下 Hyperas \text{Hyperas} Hyperas的文档。
4.3 训练过程 Training process
-
五折(与上文 20 % 20\% 20%验证集对应)交叉验证(注意虽然数据集中的矩阵数量有限,但是每个矩阵都会分块成 1000 1000 1000个块,所以数据集还是比较大的)。
-
Figure 4a \text{Figure 4a} Figure 4a是验证集上的损失函数( M S E \rm MSE MSE),单位就是 s 2 \rm s^2 s2(平方秒);
Figure 4b \text{Figure 4b} Figure 4b是 b = 250 b=250 b=250的训练过程中训练集与验证集的损失函数变化情况( 50 50 50轮);
4.4 模型测试 Testing the models
-
模型测试的指标是相对平均误差(relative mean error,下简称为RME):
RME = 1 p ∑ i = 1 p ∣ predicted i − measured i ∣ measured i \text{RME}=\frac1p\sum_{i=1}^p\frac{|\text{predicted}_i-\text{measured}_i|}{\text{measured}_i} RME=p1i=1∑pmeasuredi∣predictedi−measuredi∣ -
具体测试结果见 Figure 5 \text{Figure 5} Figure 5与 Figure 6 \text{Figure 6} Figure 6:
- Figure 5 \text{Figure 5} Figure 5是不同块大小下的测试误差;
- Figure 6 \text{Figure 6} Figure 6是补充实验的结果,即分别取 Figure 5 \text{Figure 5} Figure 5中两个CNNs对应测试误差最小的块大小又做了各种不同指标的测试结果(闲得蛋疼…);
4.5 跨架构的模型迁移 Cross-architecture model migration
-
本文为了验证CNNs模型的广泛适用性,将模型移植到不同架构上。
-
备注:
这里我理解是移植到不同的硬件架构上,而不是什么别的模型迁移,因为本文是在一种硬件上进行测试,运行时间跟硬件是关系很大的,但是这个事情就很离谱,如果硬件的底层逻辑相同,当然可以迁移,如果不同,又有什么意义呢?
-
-
Figure 7 \text{Figure 7} Figure 7中展示的是在 A57 \text{A57} A57处理器上结果:
-
Figure 8 \text{Figure 8} Figure 8即对应的 A57 \text{A57} A57处理器上的辅助实验结果:
5 相关工作 Related work
- 关于CNNs,Keras和Tensorflow的部分直接略过。(参考文献 [ 13 , 14 ] [13,14] [13,14]分别是Keras和Tensorflow,参考文献 [ 10 , 21 , 22 ] [10,21,22] [10,21,22]是CNNs的应用领域)
- 然后非常巧,本文刚好提到了笔者刚做的上一篇笔注的论文(参考文献 [ 23 ] [23] [23]),即将稀疏矩阵作为图片来进行雅可比预条件子的预测。
- 参考文献 [ 24 ] [24] [24]是使用CNNs来选取用于在SpMV中存储稀疏矩阵的最充分形式(most adequate storage format);
- 参考文献 [ 25 ] [25] [25]是使用CNNs来确定SpMV的最优实现方法。
- 参考文献 [ 26 ] [26] [26]也是类似的工作,不过不是将稀疏矩阵作为图片输入,而是经过预处理后只输入稀疏特征,然后预测SpMV的最好形式(best format);
- 参考文献 [ 27 ] [27] [27]:使用MLPs进行算法性能的预测;
- 参考文献 [ 28 ] [28] [28]:使用MLPs进行GPU上SpMV核的性能进行预测(不同的矩阵存储格式);
- 本文的创新点:
- 使用CNNs而非MLPs;
- 直接输入稀疏矩阵架构,而非与稀疏矩阵相关的矩阵指标;
- 块级处理的策略使得模型具有更好的延展性,且可以适应不同大小的矩阵和不同数量的非零元;
6 总结与展望 Conclusions and future work
- 测试集的RME约为 1 % 1\% 1%到 7 % 7\% 7%;
- 迁移到 A57 \text{A57} A57上后,误差增长到 15 % 15\% 15%;
- 其实说实在的,这种生搬硬套 V G G , A l e x N e t , L e N e t \rm VGG,AlexNet,LeNet VGG,AlexNet,LeNet的方法真的有科学依据吗?
致谢
This work was supported by project TIN2017-82972-R from the MINECO, Spain. Manuel F. Dolz was also supported by the Plan GenT project CDEIGENT/2018/014 from the Generalitat Valenciana, Spain. Maria Barreda was also supported by the POSDOC-A/2017/11 project from the Universitat Jaume I.
参考文献
- Abdelfattah A, Ltaief H, Keyes D (2015) High performance multi-GPU SpMV for multi-component PDE-based applications. In: Träff JL, Hunold S, Versaci F (eds) Euro-Par 2015: parallel processing. Springer, Berlin, pp 601–612
- Schiesser WE (2014) Computational mathematics in engineering and applied science: ODEs, DAEs, and PDEs. CRC Press, Boca Raton
- Vuduc R, Demmel JW, Yelick KA (2005) OSKI: a library of automatically tuned sparse matrix kernels. J Phys Conf Ser 16:521–530
- Williams S, Oliker L, Vuduc R, Shalf J, Yelick K, Demmel J (2007) Optimization of sparse matrix–vector multiplication on emerging multicore platforms. In: SC ’07: Proceedings of the 2007 ACM/IEEE Conference on Supercomputing, pp 1–12
- Elafrou A, Goumas G, Koziris N (2017) Performance analysis and optimization of sparse matrix–vector multiplication on modern multi- and many-core processors. In: 2017 46th International Conference on Parallel Processing (ICPP), pp 292–301
- Li S, Chang H, Zhang J, Zhang Y (2015) Automatic tuning of sparse matrix–vector multiplication on multicore clusters. Sci China Inf Sci 58(9):1–14
- Guo P, Wang L (2015) Accurate cross-architecture performance modeling for sparse matri–vector multiplication (SpMV) on GPUs. Concurr Comput Pract Exp 27(13):3281–3294
- Li K, Yang W, Li K (2015) Performance analysis and optimization for SpMV on GPU using probabilistic modeling. IEEE Trans Parallel Distrib Syst 26(1):196–205
- Eijkhout V, Pozo R (1994) Data structures and algorithms for distributed sparse matrix operations. Technical report
- Gu J, Wang Z, Kuen J, Ma L, Shahroudy A, Shuai B, Liu T, Wang X, Wang G, Cai J, Chen T (2018) Recent advances in convolutional neural networks. Pattern Recognit 77©:354–377
- Glorot X, Bordes A, Bengio Y (2011) Deep sparse rectifier neural networks. In: Gordon G, Dunson D, Dudík M (eds) Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics, volume 15 of Proceedings of Machine Learning Research. Fort Lauderdale, FL, USA, 11–13. PMLR, pp 315–323
- Ioffe S, Szegedy C (2015) Batch normalization: accelerating deep network training by reducing internal covariate shift. In: Proceedings of the 32nd International Conference on International Conference on Machine Learning, Volume 37 (ICML’15). JMLR org, pp 448–456
- Keras: The Python Deep Learning library. https 😕/keras .io/. Accessed Dec 2019
- TensorFlow, an open source machine learning library for research and production. https://www.tensorflow.org/. Accessed Dec 2019
- Keras + Hyperopt: a very simple wrapper for convenient hyperparameter optimization. http://maxpumperla.com/hyperas/. Accessed Dec 2019
- Bergstra J, Komer B, Eliasmith C, Yamins D, Cox D (2015) Hyperopt: a python library for model selection and hyperparameter optimization.Comput Sci Discov. https://doi.org/10.1088/17494699/8/1/014008
- Bergstra J, Yamins D, Cox DD (2013) Making a science of model search: hyperparameter optimization in hundreds of dimensions for vision architectures. In: Proceedings of the 30th International Conference on International Conference on Machine Learning—Volume 28, ICML’13. JMLR.org, pp I–115–I–123
- SuiteSparse Matrix Collection. https 😕/spars e.tamu.edu/. Accessed Dec 2019
- Bishop CM (2006) Pattern recognition and machine learning (information science and statistics). Springer, Berlin
- Pan SJ, Yang Qiang (2010) A survey on transfer learning. IEEE Trans Knowl Data Eng 22(10):1345–1359
- Schmidhuber J (2015) Deep learning in neural networks: an overview. Neural Netw 61:85–117
- LeCun Y, Bengio Y, Hinton G (2015) Deep learning. Nature 521:436–44 05
- Götz M, Anzt H (2018) Machine learning-aided numerical linear algebra: convolutional neural networks for the efficient preconditioner generation. In: Procs of ScalA’18: 9th Workshop on Latest Advances in Scalable Algorithms for Large-Scale Systems, WS at Supercomputing 2018, 11
- Zhao Y, Li J, Liao C, Shen X (2018) Bridging the gap between deep learning and sparse matrix format selection. SIGPLAN Not 53(1):94–108
- Cui H, Hirasawa S, Kobayashi H, Takizawa H (2018) A machine learning-based approach for selecting SpMV kernels and matrix storage formats. IEICE Trans Inf Syst E101.D(9):2307–2314
- Nisa I, Siegel C, Rajam AS, Vishnu A, Sadayappan P (2018) Effective machine learning based format selection and performance modeling for SpMV on GPUs. EasyChair Preprint no. 388, EasyChair
- Tiwari A, Laurenzano MA, Carrington L, Snavely A (2012) Modeling power and energy usage of HPC kernels. In: 2012 IEEE 26th International Parallel and Distributed Processing Symposium Workshops PhD Forum, pp 990–998
- Benatia A, Ji W, Wang Y, Shi F (2016) Machine learning approach for the predicting performance of SpMV on GPU. In: 2016 IEEE 22nd International Conference on Parallel and Distributed Systems (ICPADS), pp 894–901
图表汇总