Oracle® Developer Studio 12.5: パフォーマンスライブラリユーザーズガイド

印刷ビューの終了

更新: 2016 年 6 月
 
 

コンパイルについて

最適なパフォーマンスを得るには、もっとも適切な -xarch オプションでコンパイルしてください。リンク時には、コンパイル時に使用されたものと同じ -xarch オプションを使用して、特定の命令セットアーキテクチャー用に最適化された Oracle Developer Studio パフォーマンスライブラリのバージョンを選択します。


注 -  命令セットに固有の最適化オプションを使用すると、選択した命令セットアーキテクチャー上のアプリケーションのパフォーマンスは向上しますが、コードの移植性が制限されます。

さまざまな -xarch オプションの詳細については、Oracle Developer Studio 12.5: Fortran ユーザーズガイドまたはOracle Developer Studio 12.5: C ユーザーズガイドを参照してください。

SPARC および x86 命令セットアーキテクチャーの -xarch の値は、fbeccCC、および f95 のマニュアルページにも示されています。

64 ビットに対応したオペレーティング環境用のコードのコンパイル

64 ビット対応のオペレーティング環境用のコードをコンパイルするには、-m64 を使用し、すべての整数引数を 64 ビット引数に変換します。64 ビットルーチンには 64 ビット整数を使用する必要があります。

Oracle Developer Studio パフォーマンスライブラリでは、32 ビットおよび 64 ビットのインタフェースが提供されています。64 ビットインタフェースを使用するには:

  • Oracle Developer Studio パフォーマンスライブラリのルーチン名を変更します。 C および Fortran 95 のコードの場合は、Oracle Developer Studio パフォーマンスライブラリのルーチンの名前に _64 を付加します (たとえば、rfftf_64CFFTB_64)。USE SUNPERF 文を含む Fortran 95 コードの場合、DGEMM などの固有インタフェースには接尾辞 _64 は厳密には必須ではありません。ただし、GEMM などの汎用インタフェースには接尾辞 _64 は必須です。

  • 整数を 64 ビットに上位変換します。 倍精度変数、および倍精度複素数型変数の実数部と虚数部は、すでに 64 ビットです。整数のみが 64 ビットに上位変換されます。

64 ビット整数引数

これらの追加の 64 ビット整数インタフェースは、-m64 でリンクする場合にのみ使用できます。32 ビットオペレーティング環境用にコンパイルされたコード (-m32) で 64 ビット整数インタフェースを呼び出すことはできません。。

64 ビット整数インタフェースを直接呼び出すには、標準のライブラリ名に接尾辞 _64 を付加します。たとえば、daxpy() の代わりに daxpy_64() を使用します。

ただし、64 ビット整数インタフェースを間接的に呼び出す場合は、Oracle Developer Studio パフォーマンスライブラリのルーチンの名前に _64 を付加しないでください。パフォーマンスライブラリのルーチンを呼び出すと 32 ビットラッパーが呼び出され、このラッパーが 32 ビット整数を 64 ビット整数に上位変換し、64 ビットルーチンを呼び出したあと、64 ビット整数を 32 ビット整数に下位変換します。

最適なパフォーマンスを得るには、ルーチン名に _64 を付加してルーチンを直接呼び出してください。

C プログラムの場合は、int 引数の代わりに long を使用します。次のコード例では、64 ビット整数インタフェースを直接呼び出しています。

#include <sunperf.h>
long n, incx, incy;
double alpha, *x, *y;
daxpy_64(n, alpha, x, incx, y, incy);

次のコード例では、64 ビット整数インタフェースを間接的に呼び出しています。

#include <sunperf.h>
int  n, incx, incy;
double alpha, *x, *y;
daxpy   (n, alpha, x, incx, y, incy);

Fortran プログラムの場合は、すべての整数引数に 64 ビット整数を使用します。次の方法を使用して整数引数を 64 ビットに変換できます。

  • バイトサイズが明示的に宣言されていないすべての整数とリテラル整数定数を 32 ビットから 64 ビットに上位変換するには、-xtypemap=integer:64 を指定してコンパイルします。

  • 特定の整数の宣言を上位変換するには、INTEGER または INTEGER*4INTEGER*8 に変更します。

  • 整数リテラル定数を上位変換するには、定数に _8 を付加します。

次のコード例について考えてみましょう。

INTEGER*8 N
REAL*8 ALPHA, X(N), Y(N)

! _64 SUFFIX: N AND 1_8 ARE 64-BIT INTEGERS
CALL DAXPY_64(N,ALPHA,X,1_8,Y,1_8)

INTEGER*8 引数は、32 ビット環境では使用できません。32 ビットライブラリ、v8plusav8plusb のルーチンを 64 ビット引数で呼び出すことはできません。ただし、64 ビットルーチンを 32 ビット引数で呼び出すことはできます。

-xtypemap でコンパイルされていない Fortran 95 コードに定数を渡す場合は、リテラル定数に _8 を付加して上位変換を発生させます。たとえば、Fortran 95 を使用している場合は、CALL DSCAL(20,5.26D0,X,1)CALL DSCAL(20_8,5.26D0,X,1_8) に変更します。この例では、ルーチン名に _64 が付加されていないため、コードに USE SUNPERF が含まれていると見なします。

次のコード例では、Fortran 95 から CAXPY を 32 ビット引数で呼び出しています。

       PROGRAM TEST
       COMPLEX ALPHA
       INTEGER,PARAMETER :: INCX=1, INCY=1, N=10
       COMPLEX X(N), Y(N)

       CALL CAXPY(N, ALPHA, X, INCX, Y, INCY) 

次のコード例では、(USE SUNPERF 文を含まない) Fortran 95 から CAXPY を 64 ビット引数で呼び出しています。

       PROGRAM TEST
       COMPLEX   ALPHA
       INTEGER*8, PARAMETER :: INCX=1, INCY=1, N=10
       COMPLEX   X(N), Y(N)

       CALL CAXPY_64(N, ALPHA, X, INCX, Y, INCY)

64 ビット引数を使用するときは、USE SUNPERF 文が使用されていない場合は、ルーチン名に _64 を付加する必要があります。

次の Fortran 95 のコード例では、CAXPY を 64 ビット引数で呼び出しています。

       PROGRAM TEST
       USE SUNPERF
       .
       .
       .
       COMPLEX   ALPHA
       INTEGER*8, PARAMETER :: INCX=1, INCY=1, N=10
       COMPLEX   X(N), Y(N)

       CALL CAXPY(N, ALPHA, X, INCX, Y, INCY)

C のルーチンでは、long のサイズは -m32 でコンパイルすると 32 ビット、-m64 でコンパイルすると 64 ビットになります。次のコード例では、dgbcon ルーチンを 32 ビット引数で呼び出しています。

void dgbcon(char norm, int n, int nsub, int nsuper, double *da,
            int lda, int *ipivot, double danorm, double drcond, 
            int *info)

次のコード例では、dgbcon ルーチンを 64 ビット引数で呼び出しています。

void dgbcon_64 (char norm, long n, long nsub, long nsuper,
                  double *da, long lda, long *ipivot, double danorm,
                double *drcond, long *info)