====== ifort ======
* スパコンで使うことが前提
* [[http://web.kudpc.kyoto-u.ac.jp/manual/ja/compiler/intel|kudpc]] を参照.
===== コンパイラオプション =====
[[http://accc.riken.jp/HPC/training/text.html ]]
[[http://www.k.mei.titech.ac.jp/~stamura/NumericalComputation-Tips.html]]
これくらいオプションをつけて実行すれば,だいたいエラーは検出されそう.
ifort -check all -warn declarations -CB -fpe0 -traceback
[[fortran#コンパイラオプション]]も参照のこと
===== デフォルトのスタックサイズが小さすぎる =====
デフォルトのスタックサイズが小さすぎて、-openmpをやるときはスタックサイズを増やしてあげないと、頻繁にセグ落ちする。
!$OMP parallel
write(*,*) KMP_GET_STACKSIZE_S()
!$OMP end parallel
とやると、各スレッドのスタックサイズを返す。これを増やす場合は、最初の!$OMPの前に、
CALL KMP_SET_STACKSIZE_S(size)
とやれば良い。sizeは整数型の変数。所望のスタックサイズ(byte)を書けばよい。
===== 改行の抑制 =====
ifortでは出力時に勝手に改行する仕様になっている。
改行を抑制するためには、Format文を使用すればよい。
適当なやり方。
write(*,'(100f)') a(:)
きちんとしたやり方。以下2chより引用。
[[http://pc12.2ch.net/test/read.cgi/tech/1163319215/532]]
532 名前:デフォルトの名無しさん [sage]: 2009/03/27(金) 05:59:41
亀だけど、Ifortなら<>がお勧め。
多次元配列の最初の数を入れることが多いです
例
program main
implicit none
integer,parameter :: num = 9
integer :: ii,jj
real :: arry(num,num)
do ii=1,num
do jj = 1,num
arry(ii,jj) = ii*jj
enddo
enddo
write(6,'(F)') arry
end program
====== MKL ======
[[http://web.kudpc.kyoto-u.ac.jp/manual/ja/library/mkl|kudpc]] に記載あり.
module load mkl
してから,コンパイル.お手軽.
ifort sample.f90 -mkl
====== CSRへの変換 ======
pardisoはCSRフォーマットを用いるが,coordinateフォーマットから変換するサブルーチンが用意されている.
https://software.intel.com/en-us/node/468628
フォーマットについてはこちらから.
https://software.intel.com/en-us/node/471374
Fortranの場合,job(1:8)に与える数値は以下の通りで(だいたい)OK.
|job(1)=1|the matrix in the coordinate format is converted to the CSR format.|
|job(2)=1|one-based indexing for the matrix in CSR format is used.|
|job(3)=1|one-based indexing for the matrix in coordinate format is used.|
|job(4)|特に設定不要|
|job(5)=nnz| sets number of the non-zero elements of the matrix A if job(1)=1.|
|job(6)=0| all arrays acsr, ja, ia are filled in for the output storage.|
====== pardiso の使い方======
pardisoを用いた連立一時方程式の解き方.
スパコンの
/opt/app/intel/composer_xe_2013.5.192/mkl/examples/solverf/source/
に入っているサンプルデータを参考に,走らせたいプログラムを作成する.
include文が大事.
自分のプログラムに
include 'mkl_pardiso.f77'
か
include 'mkl_pardiso.f90'
を入れる.
配列の設定に注意が必要,詳しくは以下を参照
[http://www.pardiso-project.org/manual/manual.pdf]
コンパイラオプションは
-mkl
でお手軽♪