Oracle Developer Studio パフォーマンスライブラリのルーチンは、FORTRAN 77、Fortran 95、または C プログラム内から呼び出すことができます。ただし、C プログラムでは引き続き FORTRAN 77 呼び出しシーケンスを使用する必要があります。
Oracle Developer Studio パフォーマンスライブラリには、LAPACK、BLAS、FFTPACK、VFFTPACK、SPARSE BLAS、および SPSOLVE の各ルーチンのネイティブ C インタフェースが含まれています。Oracle Developer Studio パフォーマンスライブラリの C インタフェースには次の機能があります。
関数名は C 名です
関数のインタフェースは C の規則に従います
C インタフェースには、C 関数にとって冗長または不要な引数は含まれません
次の例では、DGBCON ルーチンについて標準の LAPACK Fortran インタフェースと Oracle Developer Studio パフォーマンスライブラリの C インタフェースを比較しています。
CALL DGBCON (NORM, N, NSUB, NSUPER, DA, LDA, IPIVOT, DANORM, DRCOND, DWORK, IWORK2, INFO) void dgbcon(char norm, int n, int nsub, int nsuper, double *da, int lda, int *ipivot, double danorm, double drcond, int *info)
引数の名前は同じで、同じ名前の引数の基底型は同じです。NORM や N など、入力値としてのみ使用されるスカラー引数は、C バージョンでは値によって渡されます。値を返すために使用される配列とスカラーは、参照によって渡されます。
Oracle Developer Studio パフォーマンスライブラリの C インタフェースは、Netlib で提供されている、標準ライブラリの f2c 変換である CLAPACK を改良します。たとえば、Fortran コンパイラとの互換性を維持するためのアンダースコアがすべての CLAPACK ルーチンの末尾には付加され、多くの場合、オブジェクト (.o) ファイル内のルーチン名の末尾にアンダースコアが付加されます。Oracle Developer Studio パフォーマンスライブラリの C インタフェースには末尾のアンダースコアは必要ありません。
Oracle Developer Studio パフォーマンスライブラリ C インタフェースでは次の規則が使用されます。
入力専用のスカラーは、参照によってではなく値によって渡されます。複素数および倍精度複素数の引数は、C ではスカラー型として実装されていないため、スカラーとは見なされません。
複素数のスカラーは、構造体または長さ 2 の配列として渡すことができます。
引数の型は、C での型変換後も一致する必要があります。たとえば、C コンパイラは引数を自動的に倍精度に上位変換する場合があるため、単精度の実数値を渡すときには注意してください。
配列は列方向に格納されます。Fortran のプログラマにとって、これは配列を格納する自然な順序です。C のプログラマにとって、これは通常作業している順序を転置したものです。ドキュメントおよびマニュアルページで、行は列のことを指し、列は行のことを指します。
配列のインデックスは、C のように 0 オリジンではなく、Fortran の規則に従って 1 オリジンです。
たとえば、IDAMAX の Fortran インタフェースは、C プログラムからは idamax_ としてアクセスし、1 を返してベクトル内の最初の要素を示します。idamax の C インタフェースは、C プログラムからは idamax としてアクセスし、同様に 1 を返してベクトル内の最初の要素を示します。関数の戻り値、置換ベクトル、およびベクトルまたは配列のインデックスが使用される任意の場所で、この規則が守られます。
SPARC バージョンの Oracle Developer Studio パフォーマンスライブラリは、グローバル整数レジスタ %g2、%g3、および %g4 を 32 ビットモードで使用し、%g2 から %g5 までを 64 ビットモードでスクラッチレジスタとして使用します。ユーザーコードでは、これらのレジスタを一時的な格納に使用して Oracle Developer Studio パフォーマンスライブラリのルーチンを呼び出すことは避けてください。Oracle Developer Studio パフォーマンスライブラリのルーチンがこれらのレジスタを使用すると、データが上書きされます。