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