Oracle® Developer Studio 12.5:性能库用户指南

退出打印视图

更新时间: 2016 年 6 月
 
 

矩阵存储方案

对已存储的数组进行处理的某些 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 算法计时的矩形全填充格式》)和手册页的“更多详细信息”部分,以了解使用矩形全填充格式的例程。