Microsoft PowerPoint - sps14_enshu2-2.pptx

Similar documents
数値計算ライブラリの使用方法 「実習編」

Microsoft PowerPoint - 演習1:並列化と評価.pptx

本日の講義内容 固有値 ( 線形代数 ) と応用問題 振動問題 ネットワーク定常問題 固有値計算アルゴリズム 密行列 べき乗法 ヤコビ法 ハウスホルダー三重対角 + 分割統治法 + 逆変換 疎行列 ランチョス法 ヤコビ デビッドソン法 その他 固有値計算ソフトウェア ScaLAPACK EigenE

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h])

EigenExaユーザーズ・マニュアル

演習準備

Microsoft PowerPoint - 演習2:MPI初歩.pptx

I I / 47

Microsoft Word - qpeigen_manual_jp-1.0.doc

memo

Microsoft PowerPoint - Eigen.pptx

GeoFEM開発の経験から

cp-7. 配列

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

09.pptx

untitled

untitled

連立方程式の解法

板バネの元は固定にします x[0] は常に0です : > x[0]:=t->0; (1.2) 初期値の設定をします 以降 for 文処理のため 空集合を生成しておきます : > init:={}: 30 番目 ( 端 ) 以外については 初期高さおよび初速は全て 0 にします 初期高さを x[j]

Microsoft PowerPoint _MPI-03.pptx

演習2

Microsoft Word _001b_hecmw_PC_cluster_201_howtodevelop.doc

gengo1-11

JavaプログラミングⅠ

行列、ベクトル

memo

情報処理概論(第二日目)

Microsoft PowerPoint - Eigen.ppt [互換モード]

Microsoft PowerPoint - 10.pptx

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C言語による数値計算プログラミング演習

スライド 1

PowerPoint プレゼンテーション

Microsoft PowerPoint - 2_FrontISTRと利用可能なソフトウェア.pptx

±é½¬£²¡§£Í£Ð£É½éÊâ

¥Ñ¥Ã¥±¡¼¥¸ Rhpc ¤Î¾õ¶·

Microsoft Word - VBA基礎(6).docx

OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 富山富山県立大学中川慎二

Microsoft PowerPoint - OS07.pptx

コンピュータグラフィックス第6回

Microsoft PowerPoint - 09.pptx

コードのチューニング

Fortran 勉強会 第 5 回 辻野智紀

演習1: 演習準備

Microsoft Word - 実験4_FPGA実験2_2015

Microsoft PowerPoint - シミュレーション工学-2010-第1回.ppt

Microsoft PowerPoint - H22制御工学I-10回.ppt

JavaプログラミングⅠ

PowerPoint Presentation

例 e 指数関数的に減衰する信号を h( a < + a a すると, それらのラプラス変換は, H ( ) { e } e インパルス応答が h( a < ( ただし a >, U( ) { } となるシステムにステップ信号 ( y( のラプラス変換 Y () は, Y ( ) H ( ) X (

第9回 配列(array)型の変数

数学の世界

第2回シミュレーションスクール - 第2日: 熱拡散方程式のプログラムをつくろう

コンピュータグラフィックス第8回

PowerPoint プレゼンテーション

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

フローチャートの書き方

要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

PowerPoint プレゼンテーション

Transcription:

Computer simulations create the future 固有値計算法 RIKEN AICS HPC Spring School 今村俊幸理化学研究所 AICS 2014/3/6 9:00~12:00

本日の講義内容 固有値 ( 線形代数 ) と応用問題 振動問題 ネットワーク定常問題 固有値計算アルゴリズム 密行列 べき乗法 ヤコビ法 ハウスホルダー三重対角 + 分割統治法 + 逆変換 疎行列 ランチョス法 ヤコビ デビッドソン法 その他 固有値計算ソフトウェア ScaLAPACK EigenExa PETSc

ライブラリ使用法 ScaLAPACK, EigenExa, SLEPC を実際に使ってみる

ScaLAPACK の利用方法

ScaLAPACK サイトの例題より http://www.netlib.org/scalapack/examples/ sample_pdsyev_call.f をダウンロードする.

How to use ScaLAPACK Link 方法, K もしくは FX10 の環境で % mpifrt o exe sample_pdsyev_call.f SCALAPACK SSL2BLAMP 実行 : #!/bin/bash #PJM -L "rscgrp=school" #PJM -L "node=2x2" #PJM -L "elapse=00:05:00" #PJM mpi proc=4 #PJM -j export OMP_NUM_THREADS=16 mpiexec./exe

Let s learn the sample code 行列生成関数 : PDLAMODHILB 固有値計算関数 : PDSYEV 結果出力 : PDLAPRNT 他に 初期化 (BLACS_XXX) や終了 (BLACS_EXIT) 行列データを扱うための descriptor の宣言 (DESCINIT) などが必要 BLACS: 通信回りの関数系 通常利用者からはプロセスの 2 次元配置の仕方などの管理系と思えばよい PDSYEV: QR 法による固有値計算ルーチン他に PDSYEVX, PDSYEVD, PDSYEVR など存在する 行列データはプロセス間で 2 次元ブロック分割 されており 行列要素ごとに格納されるプロセスが決まっている

行列設定関数を読む PDLAMODHILB を読んで分かるように 並列用の特別な変更は, 代入操作を関数呼び出し PDELSET にしている点 PDELSET はもし 呼び出しプロセスがオーナーであれば指定された値をローカルメモリ上の配列データにストアする SUBROUTINE PDLAMODHILB( N, A, IA, JA, DESCA, INFO ) DO 20 J = 1, N DO 10 I = 1, N IF( I.EQ.J ) THEN CALL PDELSET( A, I, J, DESCA, ( DBLE( N-I+1 ) ) / DBLE( N )+ONE / ( DBLE( I+J )-ONE ) ) ELSE CALL PDELSET( A, I, J, DESCA, ONE / ( DBLE( I+J )-ONE ) ) ENDIF END

やってみよう! PDLAMODHILB を改良して 自由な対称行列を入力として固有値計算をしてみよう また 固定化されている行列次元 (N), プロセス数 (NPROW, NPCOL) を変えて 計算時間の変化を見てみよう! 更に 余裕のある人は固有値求解関数を pdsyevd などに変更してどうなるかを調べてみよう

EigenExa の使用方法

EigenExa のダウンロード http://www.aics.riken.jp/labs/lpnctrt/eigenexa.html 最新版をダウンロードしてください

How to use EigenExa Build & Link 方法, K もしくは FX10 の環境で % make test 自身でリンクする場合は % mpifrt o exe foo.f leigenexa SCALAPACK SSL2BLAMP 実行 : #!/bin/bash #PJM -L "rscgrp=school" #PJM -L "node=2x2" #PJM -L "elapse=00:05:00" #PJM mpi proc=4 #PJM -j export OMP_NUM_THREADS=16 mpiexec./eigenexa_benchmark

Let s learn the sample code 行列生成関数 : mat_set 固有値計算関数 : eigen_sx ScaLAPACK 同様に 初期化 (eigen_init) や終了 (eigen_free) 必要 EigenExa は 2 次元サイクリックサイクリック分割 ( 具体的には COL,ROW 共に NB=1 固定の場合 ) の範囲では ScaLAPACK とコンパチであるので 相互の関数を利用し合うことができる 従って NB=1 で行列の descriptor が宣言されているので PDLMODHILB で作成した配列を EigenExa に渡して解くこともできる

やってみよう! 行列次元 (N), プロセス数 (NPROW, NPCOL) を変えて 計算時間の変化を見てみよう! 更に 余裕のある人は ScaLAPACK のサンプルコード内の PDLAMODHILB を組み込んで 様々な行列の固有値求解を EigenExa にさせてみよう

PETSc(SLEPC) の使い方 SLEPC の公式 Hands-on exercises サイトの題材を利用する 神大 FX10 に SLEPC がなければこの章はとりやめ

http://www.grycap.upv.es/slepc/handson/handson1.html ex1.c を使用します ex1f.f を使用します ( スクロールした下の方にあります ) /opt/aics-ss/examples の下にも一通りおいていますので そちらをアクセスしてくださしてください

コンパイル & リンク Makefile ARCH = arch-fujitsu-sparc64fx-opt PETSC_DIR = /opt/aics-ss/petsc-3.3-p5 SLEPC_DIR = /opt/aics-ss/slepc-3.3-p4 INCPATH= -I$(PETSC_DIR)/include -I$(PETSC_DIR)/$(ARCH)/include -I$(SLEPC_DIR)/include -I$(SLEPC_DIR)/$(ARCH)/include LDFLAGS= -L$(SLEPC_DIR)/$(ARCH)/lib -lslepc -L$(PETSC_DIR)/$(ARCH)/lib -lpetsc -SSL2BLAMP all: ex1 ex1f ex1: ex1.o mpifccpx-o ex1 ex1.o $(LDFLAGS) ex1f: ex1f.o mpifrtpx-o ex1f ex1f.o $(LDFLAGS) ex1.o: ex1.c mpifccpx-c ex1.c -Xg $(INCPATH) ex1f.o: ex1f.f mpifrtpx-c ex1f.f $(INCPATH) clean: rm ex1 ex1.o ex1f ex1f.o make コマンドでコンパイルする ex1, ex1f が作成される

プログラムの実行 実行 #!/bin/bash #PJM -L "rscgrp=school" #PJM -L "node=2x2" #PJM -L "elapse=00:05:00" #PJM mpi proc=4 #PJM -j export OMP_NUM_THREADS=16 echo C-version mpiexec./ex1 n 100 echo F90-version mpiexec./ex1f n 100

C version 1-D Laplacian Eigenproblem, n=100 Number of iterations of the method: 19 Solution method: krylovschur Number of requested eigenvalues: 1 Stopping condition: tol=1e-08, maxit=100 Number of converged eigenpairs: 2 C バージョンの結果 k Ax-kx / kx ----------------------------------- 3.999033 4.02784e-09 3.996131 4.31174e-09 F90 version 1-D Laplacian Eigenproblem, n =100 (Fortran) Number of iterations of the method: 19 Solution method: krylovschur Number of requested eigenvalues: 1 Stopping condition: tol=1.0000e-08, maxit= 100 Number of converged eigenpairs: 2 F90 バージョンの結果 k Ax-kx / kx ----------------------------------- 3.9990E+00 4.0278E-09 3.9961E+00 4.3117E-09

Play with SLEPC チュートリアルページから $./ex1 -n 400 -eps_nev 3 -eps_tol 1e-7 $./ex1 -n 400 -eps_nev 3 -eps_ncv 24 $./ex1 -n 100 -eps_nev 4 -eps_type lanczos 1-D Laplacian Eigenproblem, n=400 Number of iterations of the method: 100 Solution method: krylovschur Number of requested eigenvalues: 3 Stopping condition: tol=1e-07, maxit=100 Number of converged eigenpairs: 1 k Ax-kx / kx ----------------------------------- 3.999939 9.48781e-08 1-D Laplacian Eigenproblem, n=400 Number of iterations of the method: 60 Solution method: krylovschur Number of requested eigenvalues: 3 Stopping condition: tol=1e-08, maxit=100 Number of converged eigenpairs: 5 k Ax-kx / kx ----------------------------------- 3.999939 9.48494e-09 3.999754 7.19493e-09 3.999448 1.18552e-09 3.999018 6.43926e-10 3.998466 1.04213e-09 1-D Laplacian Eigenproblem, n=100 Number of iterations of the method: 62 Solution method: lanczos Number of requested eigenvalues: 4 Stopping condition: tol=1e-08, maxit=100 Number of converged eigenpairs: 4 k Ax-kx / kx ----------------------------------- 3.999033 9.95783e-09 3.996131 1.97435e-09 3.991299 9.15231e-09 3.984540 3.55339e-09

Learn the sample code SlepcInitialize( PETSC_NULL_CHARACTER, ierr) MatCreate( PETSC_COMM_WORLD, A, ierr) MatSetSizes( A,., n, n, ierr) MatSetUp( A, ierr) ( 行列やベクトルデータの宣言とデータ設定 ) ESPCreate( PETSC_COMM_WORLD, eps, ierr) ESPSetOperators( eps, A, PETSC_NULL_OBJECT, ierr) EPSSetProblemType( eps, EPS_HEP, ierr) EPSSolve( eps, ierr) EPSGetEigenPair( eps, ) EPSDestroy( eps, ierr) SlepcFinalize( ierr)

How to setup a matrix? PETSc は内部データを柔軟に制御している PETSc が管理するため 使用者からは実態は見えない 行列ハンドラ変数 A を使ってアクセスする 内部フォーマットはいくつか存在する! Simple matrix format Mat A EPS eps EPSType tname PetscReal tol, error, values(:) MatCreate( PETSC_COMM_WORLD, A, ierr) MatSetSizes( A, PETSC_DECIDE, PETSC_DECIDE, M, N, ierr) MatGetOwnershipRange(A, Istart, Iend, ierr) MatSetValues( A, m, idxm, n, idxn, values, INSERT_VALUES ADD_VALUES, ierr) MatAssemblyBegin( A, MAT_FINAL_ASSEMBLY, ierr) MatAssemblyEnd( A, MAT_FINAL_ASSEMBLY, ierr)

How to setup a matrix? PETSc は内部データを柔軟に制御している PETSc が管理するため 使用者からは実態は見えない 行列ハンドラ変数 A を使ってアクセスする 内部フォーマットはいくつか存在する! Simple matrix format Mat A EPS eps EPSType tname PetscReal tol, error, values(:) 行列データの形成 MatCreate( PETSC_COMM_WORLD, A, ierr) MatSetSizes( A, PETSC_DECIDE, PETSC_DECIDE, M, N, ierr) MatGetOwnershipRange(A, Istart, Iend, ierr) MatSetValues( A, m, idxm, n, idxn, values, INSERT_VALUES ADD_VALUES, ierr) MatAssemblyBegin( A, MAT_FINAL_ASSEMBLY, ierr) MatAssemblyEnd( A, MAT_FINAL_ASSEMBLY, ierr)

How to setup a matrix? PETSc は内部データを柔軟に制御している PETSc が管理するため 使用者からは実態は見えない 行列ハンドラ変数 A を使ってアクセスする 内部フォーマットはいくつか存在する! Simple matrix format Mat A EPS eps EPSType tname PetscReal tol, error, values(:) 行列サイズの指定グローバルサイズ MxN MatCreate( PETSC_COMM_WORLD, A, ierr) MatSetSizes( A, PETSC_DECIDE, PETSC_DECIDE, M, N, ierr) MatGetOwnershipRange(A, Istart, Iend, ierr) MatSetValues( A, m, idxm, n, idxn, values, INSERT_VALUES ADD_VALUES, ierr) MatAssemblyBegin( A, MAT_FINAL_ASSEMBLY, ierr) MatAssemblyEnd( A, MAT_FINAL_ASSEMBLY, ierr)

How to setup a matrix? PETSc は内部データを柔軟に制御している PETSc が管理するため 使用者からは実態は見えない 行列ハンドラ変数 A を使ってアクセスする 内部フォーマットはいくつか存在する! Simple matrix format Mat A EPS eps EPSType tname PetscReal tol, error, values(:) mxn のブロック行列に対して配列 values をセットする MatCreate( PETSC_COMM_WORLD, A, ierr) MatSetSizes( A, PETSC_DECIDE, PETSC_DECIDE, M, N, ierr) MatGetOwnershipRange(A, Istart, Iend, ierr) MatSetValues( A, m, idxm, n, idxn, values, INSERT_VALUES ADD_VALUES, ierr) MatAssemblyBegin( A, MAT_FINAL_ASSEMBLY, ierr) MatAssemblyEnd( A, MAT_FINAL_ASSEMBLY, ierr)

How to setup a matrix? PETSc は内部データを柔軟に制御している PETSc が管理するため 使用者からは実態は見えない 行列ハンドラ変数 A を使ってアクセスする 内部フォーマットはいくつか存在する! Simple matrix format Mat A EPS eps EPSType tname PetscReal tol, error, values(:) セットされた配列データをアセンブルする MatCreate( PETSC_COMM_WORLD, A, ierr) MatSetSizes( A, PETSC_DECIDE, PETSC_DECIDE, M, N, ierr) MatGetOwnershipRange(A, Istart, Iend, ierr) MatSetValues( A, m, idxm, n, idxn, values, INSERT_VALUES ADD_VALUES, ierr) MatAssemblyBegin( A, MAT_FINAL_ASSEMBLY, ierr) MatAssemblyEnd( A, MAT_FINAL_ASSEMBLY, ierr)

やってみよう! 余裕ある人向 少し難しくなりますが 長方領域板振動を表現する方程式 重調和関数の方程式 (E: ヤング率, h: 板厚, ρ: 密度, μ: ポアソン比 ) 変数分離法により次の固有方程式を得る

やってみよう! 固定境界条件 ( ディリクレ条件 ) のもと差分化して

テンソル積の表示を使って やってみよう! 簡単化のため正方形状として Nx=Ny=m, hx=hy=1 とする.

やってみよう! この様に作られる行列 A の固有値と固有ベクトルを計算して 得られた固有値の大きい方から順に選んで対応する固有ベクトルを m m に並べ換えたデータとして可視化するとどうなるだろうか? 可視化には gnuplot の plot3d を使ってみましょう