飞腾处理器上向量三角函数的设计实现与优化
2021-01-05沈洁龙标姜浩黄春
沈 洁 龙 标 姜 浩 黄 春
(国防科技大学计算机学院 长沙 410073)
三角函数在导航、测绘、工程、物理学等科学计算类应用中使用广泛,由于三角函数算法实现的复杂性,这些函数往往是应用中最耗时的浮点计算函数,因此如何提高三角函数性能成为科研人员设计和优化浮点计算函数的一个重点.
与此同时,单指令多数据(single instruction multiple data, SIMD)向量化对发挥当今处理器浮点计算性能至关重要[1-2].从x86处理器上的SSE(streaming SIMD extensions),AVX(advanced vector extensions)到最新的AVX512F(AVX-512 founda-tion)向量指令集,从ARM处理器的ADVSIMD(advanced SIMD)到SVE(scalable vector extension)向量指令集[3],可以看出随着体系结构的发展,处理器向量宽度正在逐步加宽、并变得更加灵活可用.然而,目前主流处理器平台上的SIMD向量指令集仅包括对基础的加、减、乘、除等算术运算以及逻辑运算、访存操作、位运算等基本操作的支持,对于复杂的浮点三角函数(以及其他超越函数)没有提供直接的支持.
科研人员通常采用软件方式设计数学库以实现三角函数等超越函数.当前,应用广泛的数学库有GNU libm库(GNU math library)[4]、Intel libimf库(Intel math library)[5]、Intel SVML库(Intel short vector math library)[6]等.其中GNU libm库和Intel libimf库是标量数学库,未能利用SIMD向量部件提高函数性能,而Intel SVML库虽然是向量数学库,但属于Intel设计和开发的商用数学库,仅面向x86处理器平台实现向量化.近来,科研人员提出了Sleef开源向量数学库[7-8],该数学库具有良好的模块化和跨平台特性,可支持多种SIMD向量指令集,在多种处理器平台上实现超越函数向量化.然而,Sleef为了实现向量化,以增加冗余计算为代价,换取函数中分支语句的减少.这样,虽然增加了SIMD向量部……
