5 resultados para SpMV


Relevância:

20.00% 20.00%

Publicador:

Resumo:

在科学计算中,稀疏矩阵向量乘(SpMV)是一个十分重要且经常被大量调用的计算内核.由于SpMV一般实现算法的浮点计算和存储访问次数比率非常低,且其存储访问模式极为不规则,其实际运行性能往往很低.通过采用寄存器分块算法和启发式分块大小选择算法,将稀疏矩阵分成小的稠密分块,重用保存在寄存器中向量x元素,可以提高该计算内核的性能.剖析和总结了OSKI软件包所采用的若干关键优化技术,并进行了实际应用性能测试.测试表明,在实际应用这些优化技术的过程中,应用程序对SpMV的调用次数要达到上百次的量级,才能抵消由于应用这些性能优化技术所带来的额外时间开销,取得性能加速效果.在Pentium4和AMD Athlon平台上,测试了10个矩阵,其平均加速比分别达到了1.69和1.48.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

稀疏矩阵向量乘(SpMV)采取压缩行存储格式的算法性能非常差,而寄存器分块算法可以使得数据尽量在靠近处理器的存储层次中访问而提高性能.利用RAM(h)模型进行分析和比较不同算法形式的存储访问复杂度,可以比较两种算法的优劣.通过RAM(h)分析SpMV两种实现形式的存储访问复杂度,同时在奔腾四平台上,测试了7个稀疏矩阵的SpMV性能,并统计了这两种算法中L1,L2,和TLB的缺失率,实验结果与模型分析的数据一致.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

OpenMP是一种支持Fortran,C/C++的共享存储并行编程标准。它基于fork-join的并行执行模型,将程序划分为并行区和串行区。近几年来,OpenMP在SMP(Symmetric Multi-Processing)和多核体系结构的并行编程中得到了广泛的应用。随着多核处理器的发展,实际的应用程序如何充分利用多个处理器核来提高运算效率也成为研究的热点。 在科学计算中,循环结构是最核心的并行对象之一。考虑到负载平衡、调度开销、同步开销等多方面因素,OpenMP标准制定了Static调度、Dynamic调度、Guided调度和Runtime调度等不同策略。针对Guided调度策略不适合递减型循环结构的缺点,本文提出了一种改进的new_guided调度策略,并在OMPi编译器上加以实现。New_guided调度策略的主要思想是对前半部分的循环采用Static调度,后半部分的循环采用Guided调度。此外,本文针对不同的循环结构,在多核处理器上对不同的调度策略进行了评测。测试结果表明,在一般情况下,OpenMP默认的Static策略的调度性能最差;对于规则的循环结构和递增的循环结构,Dynamic调度策略、Guided调度策略和new_guided策略的性能差别不大;对于递减型的循环结构,Dynamic调度策略和new_guided策略的性能相当,要优于Guided调度策略;对于求解Mandelbrot集合这类计算量集中在中间的随机循环结构,Dynamic调度策略优于其它策略,new_guided策略的性能介于Dynamic调度和Guided调度之间。 随着多核处理器的问世和发展,多线程程序设计也已经成为一个不可回避的问题。稀疏矩阵向量乘(SpMV, Sparse Matrix-Vector Multiplication)是一个十分重要且经常被大量调用的科学计算内核。SpMV的存储访问一般都极不规则,导致现有的SpMV算法效率都比较低。目前,多核处理器芯片上的内核数量正在逐步增加。这使得在多核处理器上对SpMV进行并行化加速变得非常重要。本文介绍了稀疏矩阵的两种常用的存储格式CSR和BCSR,并采用OpenMP实现了SpMV的多核并行化。此外,本文还讨论了寄存器分块算法、压缩列索引等优化技术,以及不同调度策略对多线程并行后的SpMV的影响。在曙光天阔服务器S4800A1上的测试表明,大部分矩阵都取得了可扩展、甚至是超线性的加速比,但是对于部分规模较大的矩阵,加速效果并不明显。在我们的测试中,与基于CSR实现的多线程SpMV相比,采用寄存器分块算法优化后的SpMV运算速度平均提高了28.09%。在基于CSR实现的多线程SpMV中,采用列索引优化技术后的程序比优化前的速度平均提高了13.05%。此外,本文实现了一种基于非零元个数的调度策略。在该策略中,每个线程处理几乎相同数量的非零元。我们将它和OpenMP标准提供的三种调度策略进行了测试和分析。测试结果表明:与OpenMP提供的调度策略相比,基于非零元个数的调度策略能取得更好的负载平衡;Dynamic调度和Guided调度在多线程SpMV中的性能基本相当,均优于Static调度策略。

Relevância:

10.00% 10.00%

Publicador:

Resumo:

在科学计算中,稀疏矩阵向量乘(SpMV, y=Ax)是一个十分重要的,且经常被大量调用的计算内核,广泛应用在科学计算、信息检索、气象、航天、油藏模拟、天体物理、数据挖掘等科学计算和实际应用中。在实际工程应用中,重复调用稀疏矩阵向量乘内核的次数常常会达到成千上万次。但在现代基于Cache存储层次的计算平台上,稀疏矩阵向量乘的性能很低。如果能够提高稀疏矩阵向量乘的运算速度,整个工程计算的运行效率将会得到很大的改善,计算时间也会大幅度的减少。因此优化稀疏矩阵向量乘的性能成为提高工程效率的关键,在实际应用中有着十分重要的意义。 SpMV的传统算法实现形式运行效率很低,主要原因是浮点计算操作和存储访问操作比率非常低,且稀疏矩阵非零元分布的不规则性使得存储访问模式非常复杂。寄存器分块算法和启发式选择分块算法,通过自适应选择性能最佳的分块大小,然后将稀疏矩阵分成小的稠密分块,所有的非零子块顺序计算,达到重用保存在寄存器中向量x元素的目的,减少存储访问次数和时间,从而提高这一重要内核的性能。我们在Pentium IV、Alpha EV6和AMD Athlon三个平台上,分别测试了十个矩阵下的两种不同算法形式(压缩行存储算法和寄存器分块算法)的性能,平均加速比分别达到1.69、1.90和 1.48。同时也测试了不同次数调用SpMV两种算法所用的时间,发现在实际的迭代算法应用过程中,若想采用启发式-寄存器分块算法达到性能提高的目的,一般情况下,迭代次数需要达到上百次才能有加速效果。 DRAM(h)模型是基于存储层次的并行计算模型,指出算法的复杂性包括计算复杂性和存储访问复杂性,具有近乎相同时间和空间复杂性的同一算法的不同实现形式,会有不同的存储访问复杂度,导致程序实际运行性能的差异;利用DRAM(h)模型进行分析并比较不同算法实现形式的存储访问复杂度,可以判断两种算法形式的优劣,从而为选取性能更高的实现形式提供指导。但利用DRAM(h)模型分析SpMV存储访问复杂度的工作以前没有人做过,并且SpMV的计算性能和存储访问行为跟具体的稀疏矩阵有关,只有到程序运行的时候才能知道。本文中,我们提出模板法和动态统计分析法两种分析SpMV存储访问复杂度的方法。在Pentium IV和Alpha EV6平台上,用RAM(h) 模型分析和计算了稀疏矩阵向量乘两种算法实现形式(即压缩行存储算法和寄存器分块算法)的存储访问复杂度,通过分析和计算在SpMV过程中需要访问的所有数据的存储访问复杂度,可知存储访问行为对整体程序的实际性能有直接影响。我们还在Pentium IV平台上,测试了七个稀疏矩阵的SpMV性能,并统计了两种算法中L1, L2,和TLB的缺失率,实验结果与模型分析的结果一致。