对已存储的数组进行处理的某些 Oracle Developer Studio 性能库例程通常具有可利用这些特殊存储形式的相应例程。例如,DGBMV 将构成带状存储中的一般矩阵和向量的积,DTPMV 将构成填充存储中的三角矩阵和向量的积。
如果存储带状矩阵,该矩阵的第 j 列将与 Fortran 数组的第 j 列相对应。
以下代码将一般数组中的带状一般矩阵复制到带状存储模式中。
C Copy the matrix A from the array AG to the array AB. The C matrix is stored in general storage mode in AG and it will C be stored in banded storage mode in AB. The code to copy C from general to banded storage mode is taken from the C comment block in the original DGBFA by Cleve Moler. C NSUB = 1 NSUPER = 2 NDIAG = NSUB + 1 + NSUPER DO ICOL = 1, N I1 = MAX0 (1, ICOL - NSUPER) I2 = MIN0 (N, ICOL + NSUB) DO IROW = I1, I2 IROWB = IROW - ICOL + NDIAG AB(IROWB,ICOL) = AG(IROW,ICOL) END DO END DO
这种用来存储带状矩阵的方法与 LAPACK 和 BLAS 使用的存储方法兼容。
填充向量是三角、对称或厄尔米特矩阵的另一种表示形式。 通过将元素按列的顺序存储到向量中,即可将数组填充到向量中。用于对角元素的空间总是处于保留状态,即使对角元素的值已知,例如在单位对角矩阵中。
上三角存储在数组 A 的一般存储中的上三角矩阵或对称矩阵可被传送至数组 AP 的填充存储中,如下所示。此代码来自 LAPACK 例程 DTPTRI 的注释块。
JC = 1 DO J = 1, N DO I = 1, J AP(JC+I-1) = A(I,J) END DO JC = JC + J END DO
同样,下三角存储在数组 A 的一般存储中的下三角矩阵或对称矩阵可被传送至数组 AP 的填充存储中,如下所示:
JC = 1 DO J = 1, N DO I = J, N AP(JC+I-1) = A(I,J) END DO JC = JC + N - J + 1 END DO
矩形全填充 (Rectangular Full Packed, RFP) 矩阵是一种用于存储三角矩阵和对称矩阵的数据格式。它使用 3 级 BLAS 将标准填充格式数组结合起来,充分利用了存储和高性能。有关信息,请参见《Rectangular Full Packed Format for LAPACK Algorithms Timings on Several Computers》(《多台计算机上的 LAPACK 算法计时的矩形全填充格式》)和手册页的“更多详细信息”部分,以了解使用矩形全填充格式的例程。