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 で使用される格納方法との互換性があります。

パック格納

パック化されたベクトルは、三角、対称、またはエルミート行列の代替表現です。配列は、要素を 1 列ずつ順にベクトルに格納することによって、ベクトルにパック化されます。単位対角行列の場合のように、対角要素の値が既知であっても、対角要素のための領域は常に予約されます。

上側の三角形が配列 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 形式

Rectangular Full Packed (RFP) 行列は、三角および対称行列を格納するためのデータ形式です。これは、格納領域全体を使用する標準パック形式の配列に、レベル 3 BLAS を使用して高パフォーマンスを組み合わせます。詳細については、『Rectangular Full Packed Format for LAPACK Algorithms Timings on Several Computers』および Rectangular Full Packed 形式を使用するルーチンのマニュアルページの「詳細」セクションを参照してください。