|
技術的な質問Q: どのファイルをダウンロードしたらよいのか教えてください。
A:
Sun Performance Library for Sun Studio 11 のサイズを抑えるため、so.4 ライブラリだけが含まれています。so.2 と so.3 の従来のライブラリは、このリリースには含まれていません。 従来のライブラリ so.2、so.3 を必要とするアプリケーションとの互換性を維持するため、Sun Studio 11 は以前のバージョンの Sun Performance Library をシステム上で検索し、見つかった場合にはそれらのライブラリの場所へのシンボリックリンクをインストールします。以前の Sun Performance Library パッケージが見つからなかった場合、Sun Studio 11 パッケージは現在の so.4 ライブラリだけをインストールします。従来のライブラリを指すシンボリックリンクを作成させるには、Sun Performance Library for Sun Studio 11 パッケージをインストールする前に従来のパッケージをインストールする必要があります。 Sun Performance Library の全バージョンは、Sun Download Center から無料でダウンロードできます。特定バージョンの Sun Performance Library の従来のライブラリも、そのリリースの Forte Developer 製品の CD に入っています。たとえば Forte Developer 6 update 2 リリースのパッケージは、/cdrom/cdrom0/products/packages に入っています。» 例を参照 パッケージは、必要な分だけインストールできます。 Q: 従来のファイルをインストールする前に、Sun Performance Library for Sun Studio 11 パッケージをインストールしてしまいました。どうしたらよいでしょうか ?
A:
Sun Studio 11 をインストールする前に従来のライブラリをインストールしなかった場合、従来のライブラリへのシンボリックリンクを作成するには次の手順を実行します。
従来のパッケージをインストールするには、pkgadd コマンドを使用します。使用方法については、pkgadd マニュアルページを参照してください。(デフォルト以外の場所にインストールする際には、pkgadd マニュアルページの "-a" オプションの項をよく読んでください。たとえば、"-a none" オプションは対話形式のインストールを行います。) Q: Performance Library ルーチンを汎用インタフェースを使って F95 コードから呼び出そうとすると、未解決の外部参照が出力されます。どうしたらよいでしょうか ?
A:
F95 から Performance Library に対して呼び出しを行うソースに USE SUNPERF 文が含まれていることを確認してください。USE 文は、PROGRAM 文のあと、またほかのあらゆる文 (ほかの USE 文は別) の前に配置する必要があります。
PROGRAM MyProgram USE SUNPERF ... Q: Performance Library ルーチンを汎用インタフェースを使って F95 コードから呼び出そうとすると、何度試しても「SUNPERF が USE 文でモジュール名として指定されていますが、コンパイラはこれを見つけられません。」というエラーが出力されます。
A:
F95 コンパイラは、現在のディレクトリを検索して USE 文に指定されているモジュールファイルを検索します。コンパイル行に -M オプションでディレクトリを指定すると、コンパイラはそのディレクトリも検索します。
f95 -o mytest mytest.f -xlic_lib=sunperf -M/opt/SUNWspro/lib注:この場合、f95 コンパイラは正しい sunperf.mod ファイルをアーキテクチャ固有ディレクトリで検索しません。-xarch オプションで v9 アーキテクチャを設定して実行可能ファイルをコンパイルしている場合には、正しい sunperf.mod ファイルをコンパイラが取り出せるように、該当するアーキテクチャパスを使用する必要があります。 例: f95 -o mytest mytest.f-xlic_lib=sunperf-xarch=v9a-M/opt/SUNWspro/lib/v9a Q: Performance Library ルーチンを汎用インタフェースを使って F95 コードから呼び出そうとすると、何度試しても「総称副プログラム呼び出しに一致するものが見つかりません。」というエラーが出力されます。
A:
このエラーは、Performance Library にあるルーチンを F95 汎用インタフェースを使って呼び出そうとしたときに、使用されているパラメータの並び (パラメータリスト) に、提供されているインタフェースのパラメータリストと一致するものがない場合に発生します。F95 は、「その場限りの多相性」(ad-hoc polymorphism) という技法によって多相性を実現します。つまり、特定のルーチンが 1 つの共通インタフェースを通して呼び出されているように見えていても、実際には、複数のインタフェースが作成され、コンパイラは呼び出し手順に一致するものをこれらのインタフェースの中から 1 つ取り出します。上記のエラーは、サポートされているルーチンのいずれかの呼び出しに使用されたパラメータリストが sunperf.mod ファイル内のどのパラメータリストとも一致しないことを意味します。
例 1: SUBROUTINE CAXPY(N,ALPHA,X,INCX,Y,INCY)注:ルーチンの型は ALPHA、X、Y のパラメータの型によって制御されるので、ルーチン名の第 1 文字は省略されます。1 つのパラメータリストの中で 浮動小数点型パラメータと複合型パラメータを混在させるインタフェース はサポートされません。つまり、REAL*4 の型の ALPHA と REAL*8 の型の X とを持つ AXPY を呼び出すことはできません。 例 2: SUBROUTINE DGELQF(M,N,A,LDA,TAU,WORK,LDWORK,INFO)注:あるパラメータが除外されたあと、継承パラメータは、正しく機能するために "pass-by-name" 規則を使用しなければなりません。パラメータ名は、対応マニュアルページにリストされている名前に一致します。 Q: Performance Library ルーチンを C ソースファイルから呼び出そうとすると、__f90 で始まる解決できない外部参照があると出力されます。
A:
Performance Library は、多くの F95 言語機能を活用するため、Sun F95 コンパイラによってコンパイルされています。このため、Performance Library は F90 実行時システムへの呼び出しを生成します。C コードを Performance Library とリンクするとき、参照を解決できないシンボルを次のいずれかの方法で回避できます。
Q: Performance Library に対する C インタフェースのためのインクルードファイルはどこにありますか ?
A:
Performance Library ルーチンのインクルードファイルの名前は sunperf.h で、コンパイラのあるディレクトリの下の include ディレクトリに入っています。
例:
/opt/SUNWspro にコンパイラをインストールしている場合は、次のディレクトリにそのインクルードファイルがインストールされています。
/opt/SUNWspro/prod/include/cc/sunperf.h Q: V9 アーキテクチャのアプリケーションをコンパイルする際に 64 ビットの Performance Library ルーチンを使用する方法を教えてください。
A:
Performance Library の V9 バージョンには、計算ルーチンに対する 32 ビットと 64 ビットのインタフェースが含まれています。32 ビットのインタフェースが呼び出される場合、整数パラメータは 64 ビットの整数に変換され、64 ビットのルーチンが呼び出されます。このことは、V9 バージョンの Performance Library とのリンクに際し、32 ビットインタフェースの呼び出しに多少のパフォーマンスのペナルティが生じることを意味します。64 ビットのインタフェースを直接呼び出すには、希望のルーチン名に _64 を付加します。
例 1: INTEGER*4 N, INCX, INCYV9 ライブラリにリンクすると、N、INCX、および INCY を 64 ビットの整数に変換するラッパールーチンが呼び出され、昇格されたパラメータとともに CAXPY_64 ルーチンが呼び出されます。 例 2: INTEGER*8 N, INCX, INCYV9 バージョンの Performance Library とリンクすると、64 ビットの CAXPY ルーチンが直接呼び出されます。 注: このインタフェースは、V8 または V8PLUS バージョンの Performance Library に存在しません。そのため、これらのアーキテクチャのコンパイルを試行すると、リンク時に不十分な外部参照を取得することになります。 例 3: INTEGER N, INCX, INCYV9 バージョンの Performance Library とリンクすると、64 ビットの CAXPY ルーチンが直接呼び出されます。この場合、必ずコンパイラフラグ -xtypemap=integer:64 を使用してコンパイルしてください。さもないと、未定義の結果が発生します。これは、64 ビットのルーチンが 64 ビットの整数パラメータを予測するためです。 Q: Performance Library ルーチンを呼び出すと、セグメント例外が発生します。原因と解決策を教えてください。
A:
プログラムにスタックのオーバーフローが発生している可能性があります。対処を必要とするスタックスペースは 2 種類あります。
まず、プロセスに割り当てられているスタックスペースがあります。このスペースは、limit コマンドで制御されます。次のように入力して、プロセスの制限解除を試行してください。
% unlimit stacksize第 2 に、プログラムがマルチスレッドである場合、各スレッドは独自のスタックスペースを保持します。このスペースは、${STACKSIZE} 環境変数で制御されます。単位は KB であるため、次のように入力してください。 % setenv STACKSIZE 4000各スレッドのスタックサイズが 4 M バイト に設定されます。これは、Performance Library に必要な最小値であるため、${STACKSIZE} が最低でも 4000 に設定されていることを確認してください。プログラムが大きなスタックをベースとする変数を使用する場合は、この値を引き上げる必要があります。 Q: LINPACK が削除される時期とその代わりとなるものを教えてください。
A:
Forte Developer 6 update 2 は、Sun Performance Library に LINPACK が含まれる最後のリリースです。LINPACK およびすべての旧バージョンの LAPACK に置き換わる LAPACK version 3.0 が代わりに提供されます。LINPACK ルーチンを呼び出す従来のユーザーコードを修正しても LAPACK ルーチンを呼び出せない場合、パブリックドメインバージョンの LINPACK を
|
![]()
| |||||||||||||||||||||||||||||||||||||||||