1

MKL Intel ライブラリ内で Pardiso ソルバーを使用するために、簡単な例を作成しようとしています。提供されている例に従っていますが、サブルーチンで Pardiso を呼び出すと機能しません。恐れ入りますが、INCLUDE ステートメントまたはリンクの側面に関連するものです。

すべてのサブルーチンで使用される配列は、変数と呼ばれるモジュールに含まれています

MODULE variables
INTEGER :: M        ! Lines
INTEGER :: N        ! Columns
REAL*8, DIMENSION(:,:), ALLOCATABLE :: MATRA ! original matrix
INTEGER, DIMENSION(:), ALLOCATABLE :: ROWSA,COLSA ! ia and ja in pardiso
REAL*8,    dimension(:), ALLOCATABLE :: VALSA, RHSVC, SOLVC ! a, b, x
END MODULE variables

プログラムを含むファイルは次のとおりです。

INCLUDE 'mkl_pardiso.f90'
program PardisoFortran
use variables
use mkl_pardiso
implicit none

! do some stuff to create the matrices
call create_matrices

call INITPARDISO

end program

最後にファイル initpardiso

subroutine INITPARDISO
USE VARIABLES
USE mkl_pardiso

! pardiso variable declaration    
TYPE(MKL_PARDISO_HANDLE), ALLOCATABLE  :: pt(:)
INTEGER maxfct, mnum, mtype, phase, nrhs, error, msglvl
INTEGER, ALLOCATABLE, DIMENSION(:) :: iparm
INTEGER i, idum
REAL*8 waltime1, waltime2, ddum

! --- then I allocate and fill the variables

! Finally I can call pardiso
phase = 11 ! only reordering and symbolic factorization phase

CALL pardiso_64 (PT, maxfct, mnum, mtype, phase, M, VALSA, COLSA, &
              ROWSA, idum, nrhs, iparm, msglvl, ddum, ddum, error)

end subroutine

ここで、追加のインクルード ディレクトリも Visual Studio プロジェクト構成に追加しました (つまり、

C:\Program Files (x86)\Intel\ComposerXE-2011\mkl\include;
C:\Program Files (x86)\Intel\ComposerXE-2011\mkl\lib\intel64;
C:\Program Files (x86)\Intel\ComposerXE-2011\mkl\lib\ia32)

pardiso への呼び出しにコメントすると、すべてが完全に機能します。そうしないと、次のエラーでコンパイルが停止します。

エラー 1 エラー #6285: このジェネリック サブルーチン呼び出しに一致する特定のサブルーチンがありません。[PARDISO_64] ....PardisoFortran\initpardiso.f 144

そのためのアイデアはありますか?それは上のINCLUDEステートメントの問題ですか?どこに含めるべきですか?

4

2 に答える 2

1

pardiso_64これは64ビット整数を使用するサブルーチンバージョンだと思います。コードスニペットには、整数が64ビットであることを確認するための対策を講じたという証拠は示されていません。コンパイラオプションまたは他の手段を使用して、コンパイラにデフォルトで64ビット整数を設定するように指示した可能性があります。

投稿するエラーメッセージは、ライブラリの汎用プロシージャを呼び出すときにダミー引数と実際の引数が一致しない場合に表示される典型的なエラーメッセージです。pardiso_64整数が32ビットのみであるとすると、コンパイラは32ビット整数引数をとるという名前のルーチンを探していて、見つけられませんでした。

includeエラーはステートメントとは何の関係もないと思います。

于 2013-01-25T22:48:48.323 に答える
0

あなたのコードには 1 つの問題があります。パラメーター 'ddum' はスカラーでした。次元 (M, nrhs) の配列である必要があります。もっと問題があるかもしれません。助けるためにコード全体を見る必要があります。

いつものように、インテル® MKL 関連の質問をするのに最適な場所は、MKL フォーラム ( http://software.intel.com/en-us/forums/intel-math-kernel-library )です。プログラム全体を添付して、そこに質問を投稿してください。あなたははるかに速く答えを得るでしょう!

于 2013-01-28T00:24:04.830 に答える