1

複数のコアで動作するように pardiso の Intel MKL バージョンを取得しようとしています。mtype=1私はそれを使用して、約60Kの方程式で構造的に対称なシステム( )を解きます。

  iparm= 0
  iparm(1) = 1 !
  iparm(2) = 3 !  
  iparm(3) = omp_get_max_threads() !   
  iparm(4) = 0 !
  iparm(5) = 0 !
  iparm(6) = 0 !
  iparm(7) = 0 !
  iparm(8) = 9 ! 
  iparm(9) = 0 !
  iparm(10) = 13
  iparm(11) = 1 
  iparm(12) = 0 
  iparm(13) = 0 
  iparm(14) = 0 
  iparm(15) = 0 
  iparm(16) = 0 
  iparm(17) = 0 
  iparm(18) = -1
  iparm(19) = -1
  iparm(20) = 0

これらは私のipramパラメータです。コンパイルするとき、私は持っています

F90FLAGS = ${F77FLAGS} -I${SOLIDroot} -openmp -mkl=parallel -d-lines -debug 

pardiso を呼び出す前に、MKL と openmp で使用できるスレッドの数も設定します。

call mkl_set_num_threads(3) call omp_set_num_threads(3)

call mkl_set_dynamic(0) ! disabling dynamic adjustment of the number of threads

私が理解している限り、すべての MKL 関数は、「十分に」大きな問題に対して許可または有効化されている場合、複数のスレッドを使用しようとします。私はすでに OMP を使用していくつかの並列処理を行っており、コードは複数のコアで実行されます。私が pardiso と呼んでいる地域はシリアルです。私の質問は、pardiso を複数のコアで動作させるには他に何が必要ですか?

のデフォルト値iparm、つまりiparm(1)=0で試してみましたが、変化はありませんでした

4

1 に答える 1

-1

コメントを追加できません (評判が不十分です)。

コードを実行する前に環境変数 OMP_NUM_THREADS を設定してみて、それが機能するかどうかを確認してください。

于 2015-11-05T22:20:40.580 に答える