首页 理论教育 程序代码的优化技巧

程序代码的优化技巧

时间:2023-06-29 理论教育 版权反馈
【摘要】:再次,在出现两重循环或多重循环之处,多个循环的嵌套次序对程序性能也有较大影响。此外,由于对许多专用处理器,都已经由生产厂商提供了专为这些处理器研制的高性能计算基本库,如:基本向量、矩阵运算子程序BLAS、线性代数函数库LAPACK等,这种库中的函数相对一般所写的具有相应功能的子程序而言,经过了优化方面的特别考虑,所以在这些处理器上具有更高的性能。

程序代码的优化技巧

在对稀疏线性方程组求解与刚度矩阵装配算法进行改进之前,其他各个模块所需要的时间相对很短,但在对算法进行改进之后,这些模块所占用的时间在整体模拟时间中所占的比重相对增大,所以对其他模块进行性能优化也是十分必要的。

首先,在有的处理器上进行浮点运算时,除法操作所需要的时间比乘法操作所需要的时间长,基于这种考虑,在有的量被多次重复作为被除数的地方,可以事先计算该量的倒数,之后利用乘法来代替除法,这可以在一定程度上缩短计算时间。例如,在judge子程序中,就反复出现除以2.0的计算,这种计算可以直接用乘以0.5来代替。

其次,在原程序中,反复出现在循环内的某些计算是与循环变量无关的,这种情况在gpmc、substrain、stiff8、gravity与formdm等子程序中都有出现。这些计算实际上对所有循环变量而言都是一样的,所以可以事先在循环之外将该计算结果算出来,再在循环之中引用这个结果即可,通过这种技术可以明显减少计算量。此外,即使在同一个循环之内,也可以利用这种思想来消除重复计算。(www.xing528.com)

再次,在出现两重循环或多重循环之处,多个循环的嵌套次序对程序性能也有较大影响。对这里所考虑的程序,由于是利用FORTRAN语言所编写的,出现两重循环之处大多对应于对二维数组的访问,而在FORTRAN中,二维数组在内存中是按列优先的方式进行存储的,所以对循环的嵌套次序进行合理安排,使得对应于行号的循环嵌套于对应于列号的循环之内,就可以提高Cache的利用率,减少访存的频率,提高数据供应速度,从而提高处理器的实际性能,缩短处理时间。

此外,由于对许多专用处理器,都已经由生产厂商提供了专为这些处理器研制的高性能计算基本库,如:基本向量、矩阵运算子程序BLAS、线性代数函数库LAPACK等,这种库中的函数相对一般所写的具有相应功能的子程序而言,经过了优化方面的特别考虑,所以在这些处理器上具有更高的性能。所以,应该尽可能调用厂商提供的这些高性能库函数,对此处遇到的程序,主要调用的是BLAS子程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈