本技术涉及一种优化的数据处理方法,旨在加速大型复数稀疏矩阵的计算过程,特别适用于电磁计算等领域中的大规模复数稀疏矩阵方程组的迭代求解。该方法通过微分方程法对物理模型进行处理,以提高计算效率。
背景技术
电磁场基础的工业技术在人类现代文明的发展中起到了及其关键的推动作用,并且在未来也将是重要的基础技术。近年来,我国在与电磁密切相关的领域取得了一系列重要进展,如空中预警指挥飞机成功服役、深地和海洋矿产资源探测等。一般来说,常用的电磁场数值计算方法可以分为两大类:一类是基于微分方程的解法;另一类是基于积分方程的解法。其中基于有限单元法、有限差分法、有限体积法等微分方程法的电磁计算,通常最后都需要求解大型复数稀疏矩阵方程组,而求解方程组的过程通常又占据了整个计算流程90%以上的时间。
当前多核处理器为了适用于多媒体音频、图像处理等领域的应用都扩展了向量寄存器体系结构,例如X86的AVX架构,ARM的NEON架构等。向量寄存器的原理是SIMD(SingleInstruction Multiple Data,单指令多数据流),旨在利用一条指令同时处理多个数据,像ARMv8架构里面的fmal乘加指令、fadd加法指令等,X86体系里面也有类似的指令。ARMv8架构中向量寄存器有128位大小,可以存储2位double类型的数据或者4位float类型的数据。
此处简单介绍一下向量寄存的工作过程,如图1所示,v1、v2、v3为128位向量寄存器,其中存放两个数组a和b,现在要使得a,b两个数组对应元素相乘,普通的乘法指令需要调用4次才能够实现这个过程(如图1所示),而向量化指令则只需要一条fmul相乘指令就能够完成任务,如图2所示。由此可见当处理的数据能够形成规模并且对齐,那么SIMD技术能够大大提升计算速度。
一般而言,大型复数稀疏矩阵都会采用CSR、COO、SELL等压缩存储格式进行存储以节省空间,SPMV运算是计算访存密集型操作,但这些存储格式使得方程组在访问内存上不连续,尤其是x向量的访问。这导致了在计算大型复数稀疏矩阵方程组时会有大量的高速缓存缺失情况,从而无法充分利用好向量加速硬件的性能,增加了访存开销从而拖慢整体运行速度。
实现思路