ppOpen-HPCの概要とシミュレーション基本的流れ体験
松本正晴
東京大学大学院情報理工学系研究科コンピュータ科学専攻
第95回お試しアカウント付き並列プログラミング講習会「ライブラリ利用：科学技術計算の効率化入門」
2018年3月13日（火）～3月14日（水）本日の内容1. 近年のスーパーコンピュータのトレンドとppOpen-HPCの概要（座学）2. 3D熱伝導解析による並列化シミュレーションの基本的流れ（座学）
3. Oakleaf-FXでのサンプルコードを用いた演習
2

本日の内容1. 近年のスーパーコンピュータのトレンドとppOpen-HPCの概要（座学）2. 3D熱伝導解析による並列化シミュレーションの基本的流れ（座学）
3. Oakleaf-FXでのサンプルコードを用いた演習3

背景（1/2）
 大規模化、複雑化、多様化するハイエンド計算機環境の能力を充分に引き出し、効率的なアプリケーションプログラムを開発することは困難
 有限要素法等の科学技術計算手法：
 プリ・ポスト処理，行列生成，線形方程式求解等の一連の共通プロセスから構成される。
 これら共通プロセスを抽出し，ハードウェアに応じた最適化を施したライブラリとして整備することで，アプリケーション開発者から共通プロセスに関わるプログラミング作業，並列化も含むチューニング作業を隠蔽できる。
 アプリケーションMW，HPC-MW，フレームワーク4

背景（2/2）
 A.D.2000年前後
 GeoFEM，HPC-MW 地球シミュレータ，Flat MPI，FEM
 現在：より多様，複雑な環境
 マルチコア，GPU ハイブリッド並列• MPIまでは何とかたどり着いたが・・・• 「京」でも重要
 CUDA，OpenCL，OpenACC
 ポストペタスケールからエクサスケールへ• より一層の複雑化

Applications

GeoFEM, HPC-MW etc.

Fortran, C, MPI, OpenMP …
Vector, Scalar, MPP …

FEM code developed on PC
I/F for
I/O
I/O

I/F forMat.Ass.
MatrixAssemble

I/F forSolvers
LinearSolverI/F for
Vis.
Vis.

HPC-MW for T2K

I/O

MatrixAssemble

LinearSolverVis.

HPC-MW for Earth Simulator
I/O

MatrixAssemble

LinearSolverVis.

HPC-MW for
Next Generation Supercomputer5Hybrid並列プログラミングモデル
MPI + “X”
Flat MPI

core
core

core
memorycore

memorymemory

core

core

core

core

core
core
core

core
core
core
core

memory

core
core
core
core

memoryOpenMP/MPI Hybrid
memory Message Passing
 MPI
 Multi Threading OpenMP CUDA, OpenCL

core

core
core
core
core

6

7

TOP500に見るスーパーコンピュータのトレンド（1/2）
http://www.top500.org/
Site

Nov. 2017 List

Rmax：実効性能（TFLOPS），Rpeak：理論性能（TFLOPS），Power: kW

Computer/Year Vendor

Cores

Rmax

Rpeak

Power

1

National Supercomputer Center Sunway TaihuLight - Sunway MPP, Sunway
SW26010 260C, 2016 Sunway
in Wuxi, China

10,649,600

93,014125,435(=93.0PF)

15,371

2

National Supercomputer Center Tianhe-2 (MilkyWay-2) Xeon E5-2692, Xeon Phi
31S1P, 2013 NUDT
in Guangzhou, China

3,120,000

33,86354,902(=33.9PF)

17,80819,590 25,326

2,272

19,135 28,192

1,350

17,59027,1138,209

1,572,864

17,173 20,133

7,890

979,968

14,137 43,902

3,844

622,336

14,014 27,880

3,939

556,104

13,554 24,913

2,719

705,024

10,51012,660
7

Swiss National Supercomputing Piz Daint Cray XC50, Xeon E5-2690v3 12C, NVIDIA
361,760
Tesla P100, 2012 Cray
Ctr. (CSCS), Switzerland
Gyoukou ZettaScaler-2.2 HPC System, Xeon D4 JAMSTEC, Japan
19,860,000
1571 16C, PEZY-SC2, 2017 ExaScaler
DOE/SC/Oak Ridge National
5
Titan Cray XK7/NVIDIA K20x, 2012 Cray
560,640
Laboratory, USA
3

6 DOE/NNSA/LLNL, USA

Sequoia BlueGene/Q, 2011 IBM

7 DOE/NNSA/LANL/SNL, USA

Trinity Cray XC40, Xeon Phi 7250 68C, 2015 Cray

8 DOE/SC/LBNL/NERSC, USA
9 JCAHPC, Japan
10 RIKEN AICS, Japan

Cori Cray XC40, Intel Xeon Phi 7250 68C, 2016
Cray
Oakforest-PACS PRIMERGY CX1640 M1, Intel
Xeon Phi 7250 68C, 2016 Fujitsu
K computer SPARC64 VIIIfx , 2011 Fujitsu

11,280TOP500に見るスーパーコンピュータのトレンド（2/2）
 2017年11月現在，Top500に掲載されたシステムのうち，102システムは
accelerator/co-processorを搭載 NVIDIA:86，Intel Xeon Phi (as a co-proc.):12，
PEZY:5, Intel /NVIDIA combined:2, Intel Xeon Phi (as a main-proc.):14
 上記102システムのアクセラレータが持つ平均のコア数は294,000 cores/systemで最多は4位のGyoukouで19,860,000コア
 2位のTianhe-2，7位のTrinity, 8位のCori，9位のOakforest-PACSはintel Xeon Phi、3位のPiz Daintと5位のTitanはNVIDIA GPUを搭載。

すでにGPUやMIC（accelerator/co-processor）を搭載したいわゆる“ヘテロジニアス”なアーキテクチャが主流になりつつあり、今後もこの傾向は続くと予想されている。
→ CUDA, OpenCL, OpenACC, OpenMP4….
→ 従来に比べ、（高性能）コーディングが難しい。
8

東大情報基盤センターのスパコン

9Oakforest-PACS• 2016年12月1日稼働開始• 8,208 Intel Xeon/Phi (KNL)，理論性能25PFLOPS– 富士通が構築• 最先端共同HPC 基盤施設(JCAHPC: Joint Center for
Advanced High Performance Computing)– 筑波大学計算科学研究センター– 東京大学情報基盤センター• 東京大学柏キャンパスの東京大学情報基盤センター内に、両機関の教職員が中心となって設計するスーパーコンピュータシステムを設置し，最先端の大規模高性能計算基盤を構築・運営するための組織– http://jcahpc.jp10Oakforest-PACS外観
東京大学柏キャンパス
第２総合研究棟に設置

共同通信 www.47news.com

11

Oakforest-PACSの特徴• 計算ノード8,208個からなる超並列クラスタ– 理論性能：3 TFLOPS×8,208ノード＝25 PFLOPS– メニーコア型：Intel Xeon Phi（Knights Landing）
計算ノード• 1ノード当たり68コア• メモリ（MCDRAM（高速，16GB）＋DDR4（96GB））• ファイルI/O– 並列ファイルシステム：
Lustre 26PB，総バンド幅 500GB/s– 高速ファイルキャッシュシステム：
容量940TB，総バンド幅1,560GB/s
1 TB/sec（1000GB/s）を超える実効性能• Top500で国内１位（世界6位→7位）

並列ファイル
システム

ファイル
キャッシュ
システム

12

データ解析・シミュレーション融合システム：Reedbush• 2016年7月稼動開始，システム構成・運用：SGI• 計算ノード：理論性能 1.926 PFLOPS– 汎用計算ノード（Reedbush-U）：ＣＰＵのみ（Intel Xeon Broadwell-EP）– 演算加速ノード（Reedbush-H）：GPUを搭載（NVIDIA Tesla P100）• 2017年３月稼動開始– インターコネクト：100G bps/ノード（Full Bisection Fat-Tree）• ファイルI/O– 並列ファイルシステム（Lustre）：5.04 PB，145.2 GB/sec– 高速ファイルキャッシュシステム：SSD:230 TB，385.2GB/sec
演算処理能力 並列ファイルシステム

Oakforest-PACS 25PFLOPS

26PB (500GB/s)

Reedbush

5PB

1.9PFLOPS

高速ファイルキャッシュシステム

940TB (1560GB/s)(145GB/s) 230TB (385GB/s)

演算性能は1/10以下だが，ファイルI/O性能は約1/4を維持

13

Reedbushシステム外観
本郷地区（浅野キャンパス）情報基盤センターに設置

14

Key-Issues for Appl’s/Algorithms towards
Post-Peta & Exa Computing
Jack Dongarra (ORNL/U. Tennessee) at ISC 2013

 Heterogeneous/Hybrid Architecture Communication/Synchronization Reducing
Algorithms
 Mixed Precision Computation
 Auto-Tuning/Self-Adapting Fault Resilient Algorithms
 Reproducibility of Results
現在より複雑なチューニングが必須となるため，ユーザーを支援するためのフレームワークの重要性が高まる。

15

ppOpen-HPC• 東京大学情報基盤センターでは，メニィコアに基づく計算ノードを有する
ポストペタスケールシステムの処理能力を充分に引き出す科学技術アプ
リケーションの効率的な開発，安定な実行に資する「自動チューニング機構を有するアプリケーション開発・実行環境：ppOpen-HPC」を開発中。
• 科学技術振興機構戦略的創造研究推進事業（CREST）研究領域「ポストペタ
スケール高性能計算に資するシステムソフトウェア技術の創出 （Post-Peta
CREST）」（2011年度～）（領域統括：佐藤三久（理化学研究所計算科学研究機構））• PI：中島研吾（東京大学情報基盤センター）• 東大（情報基盤センター，大気海洋研究所，地震研究所，大学院新領域創成科学研究科），京都大学術情報メディアセンター，北海道大学情報基盤セン
ター，海洋研究開発機構• 様々な分野の専門家によるCo-Design16

概要• 大規模シミュレーションに適した5種の離散化手法に限定し，各手法の特性に基づいたアプリケーション開発用ライブラリ群，耐故障機能を含む実
行環境を実現する。
– ppOpen-APPL：各手法に対応した並列プログラム開発のためのライブラリ群– ppOpen-MATH：各離散化手法に共通の数値演算ライブラリ群– ppOpen-AT：科学技術計算のための自動チューニング（AT）機構– ppOpen-SYS：ノード間通信，耐故障機能に関連するライブラリ群• 平成24年11月にマルチコアクラスタ向けに各グループの開発したppOpenAPPL，ppOpen-AT，ppOpen-MATHの各機能を公開（Ver.0.1.0）– http://ppopenhpc.cc.u-tokyo.ac.jp/– 平成25年11月にVer.0.2.0公開– 平成26年11月にVer.0.3.0公開– 平成27年11月にVer.1.0.0公開

17

ライブラリ群と対象とする離散化手法

有限要素法

差分法

有限体積法

Finite Element Method
FEM

Finite Difference Method
FDM

Finite Volume Method
FVM

境界要素法

個別要素法

Boundary Element Method
BEM

Discrete Element Method
DEM

18

ppOpen-HPCを利用した地震波動－建築物振動連成シミュレーション

地震波動の伝播（FDM）と、それに伴う建築物の振動（FEM）について、
FDM→FEMの片側連成で解析を行う。

19

利用するアプリケーションについて
Seism3D+ (composed by ppOpen-APPL/FDM)
広域の地震波動伝播を解析するための陽解法FDMアプリ
v: 速度  xp  yp  zp

σ: 応力

 


 f p ,  p  x, y, z t  x
y
z
f: 外力

λ, µ: Lame定数
 pq
 v x v y v z  v p vq  pq   ,  p, q  x, y, z   



t
y
z 
p 
 x
 q

v p

FrontISTR++ (composed by ppOpen-APPL/FEM)
複雑な形状にも対応できる構造解析用陰解法FEMアプリ

  Cd  Kd  F
Md

M: 質量行列
F: 節点荷重ベクトル
C: 減衰行列d: 節点変位ベクトル
K: 剛性行列

両者の計算負荷はSeism3D+ ＜ FrontISTR++

20

カップラライブラリppOpen-MATH/MP
ppOpen-APPLライブラリ群がサポートする離散化手法（FDM，FEM，FVM，BEM，DEM）を基に構築される複数のアプリ間のモデル結合，データ送受信，データ変換のための弱連成用カップラー
User’s Program

ppOpen-APPL

FEM

FDMii

FVM

BEM

ppOpen-MATH

MG

ii
GRAPH

VIS

MP

ppOpen-AT

STATICii
DYNAMIC

ppOpen-SYS

COMM

FTii

DEM

ppOpen-HPC

Optimized Application with
Optimized ppOpen-APPL, ppOpen-MATH

21

連成シミュレーションの実装

Building

Overlapped region
FrontISTR++

FrontISTR++の格子
色はプロセス（64プロセスの場合）

22

Oakleaf-FXによる大規模実行の結果

地下方向

計4560ノード@Oakleaf-FX（Seism3D+: 2560ノード、FrontISTR++: 2000ノード）
東西方向

Seismic wave propagation by Seism3D+（Red：P-wave、Green：S-wave）

Vibration of K computer bldg.
by FrontISTR++

23

可視化用ライブラリppOpen-MATH/VIS• ボクセル型背景格子を使用した大規模並列可視化手法〔Nakajima & Chen 2006〕に基づく– 差分格子用バージョン公開：ppOpen-MATH/VIS-FDM3D• UCD single file
• プラットフォーム– T2K，Cray– FX10– Flat MPI
24

Simplified Parallel Visualization using
Background Voxels[KN, Chen 2006]• Octree-based AMR• AMR applied to the region where gradient of field values are large• stress concentration, shock wave, separation etc.

• If the number of voxels are controled, a single file with 105 meshes ispossible, even though entire problem size is 109 with distributed data
sets.

25

Example of Surface Simplification
Initial(11,884 tri’s)

50% reduction(5,942 )95% reduction(594)

98% reduction
(238)

26

研究協力・普及• 国際的共同研究– Lawrence Berkeley National Lab.
– 国立台湾大学– ESSEX/SPPEXA/DFG, Germany– IPCC（Intel Parallel Computing Ctr.）• 普及– 大規模シミュレーションへの適用• CO2 地下貯留，物性物理• 宇宙物理，地震シミュレーション• ppOpen-AT, ppOpen-MATH/VIS, ppOpenMATH/MP, 線形ソルバー群• H行列ライブラリ

– 国際WS（2012,13,15）– 講習会（東大センター），講義

27

本日の内容1. 近年のスーパーコンピュータのトレンドとppOpen-HPCの概要（座学）2. 3D熱伝導解析による並列化シミュレーションの基本的流れ（座学）
3. Oakleaf-FXでのサンプルコードを用いた演習
28

3次元並列化熱伝導シミュレーションの演習
 計算機シミュレーションは，支配方程式の離散化→並列化プロ
グラムの実装→計算の実行→計算結果の可視化→最適化，が一連の流れ。
 陽的差分法による離散化を施した3次元熱伝導方程式の並列シ
ミュレーション（MPI + OpenMP）の基本的な流れを体験。
••••

Oakleaf-FXの利用
Fortranによる実装例
ppOpen-MATH/VISを利用する可視化（Paraview使用）
富士通プロファイラの利用（テキスト and Excel）
29

熱伝導方程式の離散化（1/3）
物質の内部エネルギー+ 熱流束qの出入り = 熱源S（E=ρCT）の時間変化TT q x q y q z
C
   q  S  C



S
t
t
x
y
z

qin

S

qout


T
1    T    T    T    k   k  S kt C  x  x  y  y  z  z 


T
T
T
, q y  k
, q z  kただし， q x   kxyz
密度，比熱，熱伝導率が空間に対して一様なら，  2T  2T  2T  S
T   2  2  2  tyz  C xk
ただし，  
C

T：物質の温度 [K]ρ：物質の密度 [kg/m3]
C：物質の比熱 [J/(kgK)]q：熱流束 [W/m2]
S：熱源 [W/m3]
k：物質の熱伝導率 [W/(mK)]30熱伝導方程式の離散化（2/3）
計算格子は3次元等間隔直交座標系（図は2次元）。

密度，比熱，熱伝導率が空間に対して非一様の場 y
合は，右図のように有限体積的な格子系を用いると離散化しやすい。物理量は整数位置（i,j）に定義。

q ki 1/ 2, jq iy, j 1/ 2  ki , j 1/ 2

Ti , j  Ti 1, jxTi , j  Ti , j 1
x




Ti 1, j 1
q xi 1/ 2, j

まず，熱流束を半整数位置で評価。
i 1 / 2 , jxx

ki , j  ki 1, j Ti , j  Ti 1, jxTi 1, j 1

Ti , jTi 1, jTi 1, jq iy, j 1/ 2

2
x
ki , j  ki , j 1 Ti , j  Ti , j 1
2

Ti , j 1

Ti 1, j 1

Ti , j 1

Ti 1, j 131

熱伝導方程式の離散化（3/3）
時間微分はEuler陽解法で離散化すると，次の時間
ステップの温度は以下のように求められる。

T
1  q x q y
 S 
tC  x yTi ,next
j  Ti , j
t

x

y



i , j 1 / 2
i , j 1 / 2
i 1 / 2 , ji 1 / 2 , j


q

q
 qx
1  qxyy Si , j  i , j Ci , j xyTi ,next
 Ti , jji , j 1 / 2
i , j 1 / 2
i 1 / 2 , ji 1 / 2 , j


q

q
 qx
t  q xyy Si , j  i , j Ci , j xyTi 1, j 1
q xi 1/ 2, j

Ti , j 1

Ti 1, j 1

Ti , jTi 1, jTi 1, jq iy, j 1/ 2
Ti 1, j 1

Ti , j 1

Ti 1, j 132

計算領域とMPI通信
7

6
4

5

rank.2

rank.3

3
0

袖領域

1

rank.0

隣接する他のランクの計算領域と数グリッド分
だけ袖領域を重なり合うように持っており、そこに隣接ランクの物理量を通信して持ってくる。

袖領域

3次元領域分割（数字はランク）
rank.1
主領域

計算領域（2次元例）33

本日の内容1. 近年のスーパーコンピュータのトレンドとppOpen-HPCの概要（座学）2. 3D熱伝導解析による並列化シミュレーションの基本的流れ（座学）
3. Oakleaf-FXでのサンプルコードを用いた演習
34

サンプルコード（main.f90）で計算する問題
Fortran90コードで、MPIとOpenMPによるハイブリッド並列化されている。
3次元の計算領域（物体）の中央に熱源を置いた際の温度上昇と温度の伝わり方を見る。
計算領域（格子点数:64×64×64）
Δx=1.0, Δy=1.0, Δz=1.0
X=0.5～63.5
Y=0.5～63.5
Z=0.5～63.5
熱源の範囲
X=28～36, Y=28～36, Z=28～36

35

サンプルコード（main.f90）のメイン関数部分
program thermal_conduction_3D
use global_var
グローバル変数はモジュールで定義。各サブルーチンは
implicit none
integer::nt,nstep
このモジュールをuseすることで、グローバル変数を共有。
double precision::mtime
call start_parallel
mpi_init等
call load_param
外部ファイルから計算パラメータを読み込み（格子点数，プロセス数等）
call allocate_array
読み込んだパラメータを基に配列を用意
call initial_conditions
物理量の初期条件の設定
mtime=0.0d0; nstep=0
do nt=1,ntmax
時間発展のメインループ
mtime=mtime+dt
call kernel
通信を含む熱伝導の計算部分
if(mod(nt,nfreq)==0) thenif(rank==0) print *,'step & time:',nt,mtime
nstep=nstep+1
call output(nstep,T)
計算結果のファイル出力
endif
enddo
call end_parallel
mpi_finalize
contains
36

計算パラメータ設定用ファイル（input.dat）
32 32 3212 2 21000 1000.1d0z!nxmax nymax nzmax!
nbuff!pxmax pymax pzmax!
ntmax nfreq!
CFL

1プロセス当たりの格子点数（x,y,z）
袖領域の格子点数（>=1）
MPIプロセス数（x,y,z）
全タイムステップ数，出力タイミング
クーラン数（< 0.5）
14

13

12

7

6

15

y
4

x

8

5

9

3
0

1

例えば上図だと
pxmax=2, pymax=2, pzmax=2（全8プロセス）

0

1

10
3
2

11
7
3

例えば上図だと
pxmax=4, pymax=2, pzmax=2（全16プロセス）

37ソースファイルの準備
Oakleaf-FXの/home/c26050にLecture_20170912.tarというファイ
ルがありますので、各自コピーして展開してください。
% cp /home/c26050/Lecture_20170912.tar ./% tar xvf Lecture_20170912.tar% cd Lecture_20170912% ls
1.original 2.with_vis 3.with_prof_txt 4.with_prof_excel
Lecture_20170912/の中身
1.original/
オリジナルのサンプルコード
2.with_vis/
ppOpen-MATH/VISを実装したコード
3.with_prof_txt/
プロファイルルーチンを実装したコード（txt出力）
4.with_prof_excel/ プロファイルルーチンを実装したコード（excel出力）38

１．サンプルコードの実行
１．1.original/の中のcompileファイルを実行% ./compile
２．すると，run/の中に実行ファイルoriginalが生成。runに移動。
% cd run% ls
input.dat job.sh original results/
パラメータ設定用
入力ファイルジョブスクリプト

実行ファイル

計算結果出力用
ディレクトリ

３．バッチジョブ実行で計算（ジョブスクリプトで指定するプロセス数はinput.dat
で指定したプロセス数pxmax*pymax*pzmaxと一致させること！）% pjsub job.sh
４．実行が終了したらresults/の中にファイルが出力されていることを確認

39

ジョブスクリプトファイル（job.sh）の設定について#!/bin/sh#PJM -L "rscgrp=tutorial"#PJM -L "node=2"#PJM -L "elapse=00:15:00"#PJM -g gt00
#PJM --mpi "proc=8"

export OMP_NUM_THREADS=4
export PARALLEL=4
rm ./results/*
mpiexec ./original

ノード数，MPIプロセス数，OpenMP
スレッド数は任意に設定できる。
ノード数
MPIプロセス数（input.datで指定したpxmax*pymax*pzmaxの値と合わせること！）

OpenMPスレッド数（<=16）

左の例では，8プロセス×4スレッド＝32コア使用する場合，16コア/ノードなので，ノード数は2となる。

40

演習１
1. 計算結果の出力ファイル（resultsディレクトリ全部）を自分のＰＣにダウンロードして，Paraviewで可視化（スナップショット，アニメーション等）しなさい。
2. 入力ファイルinput.datならびにジョブスクリプトjob.shを自由に書き換えて計算しなさい。（格子点数，プロセス数，出力ファイル数等を増やしすぎると計算が重くなりすぎるので注意！）

41Paraviewによる可視化 ParaViewは共有メモリ/分散メモリ型のコンピュータやクラスタ上でのデータ並列化を行うアプリケーションとして設計されたオープンソースの可視化
ソフトウェアであり、Linux, UNIX, Windows, macOSなどの多くのOSに対応したバージョンが開発されている。
 データが分散化されている３次元計算結果の可視化が可能。
 http://www.paraview.org/
 詳細な使い方については、ネット上で検索すれば多くのドキュメントが見つかるので、それらを参照。
 Paraviewが入ってない人はダウン
ロード＆インストールしてください。

Paraviewで読み込めるデータ
 構造格子（一様直交格子、非一様直交格子、曲線格子）、非構造格子、多角形、画像、マルチブロックなどのデータを扱う。
 VTKを含む様々なファイル形式をサポート。VTKはシリアル、パラレルを含むすべての種類、ASCII、バイナリの読み書きが可能。
 VTKはXMLベースのデータフォーマットであり、各プロセスのデータはresults/rawdata/propXXXXX_rankX
XXX.vtiというファイルにあり、それら分散
データを統合するファイルがfield/propXXXXX.pvtiにある。

Paraviewについて
Paraviewの詳しい説明はしませんので、各自で検索してください。
１．Open Fileでファイルを開く

３．Sliceを押して、再度Applyを押す。

２．Applyを押す（少し重いかも）44

ppOpen-MATH/VIS可視化ライブラリの利用計算が大規模化すると，計算に使用する格子点数が膨大に増加してしまうため，可視化を行うことが難しくなってくる。ppOpen-MATH/VISライブラリを使うことによって，物理量の勾配がきつい領域は細かい，勾配が緩やかな領域は粗い格子点数で出力できる。
公開パッケージの配布場所：http://ppopenhpc.cc.u-tokyo.ac.jp/
使用パッケージ：ppOpen-MATH/VIS ver.0.2.0
ドキュメントや詳しいインストール方法等は公開パッケージをダウンロード。
本講習会では，2.with_vis/ppohVIS/ディレクトリにインストール済みで，ソース
コードにも実装済み。
ppOpen-MATH/VIS用入力ファイル：control.dat[Refine]AvailableMemory = 2.0
MaxVoxelCount = 10000
MaxRefineLevel = 20
[Simple]ReductionRate = 0.0

細分化制御情報セクション
利用可能メモリ容量（GB）not in use
Max Voxel #Max Voxel Refinement Level
簡素化制御情報セクション
表面パッチ削減率

45

ppOpen-MATH/VISライブラリの実装例
1.original/main.f90
program thermal_conduction_3D
use global_var
implicit none
integer::nt,nstep
double precision::mtime
call start_parallel
call load_paramcall allocate_arraycall initial_conditions

・・・

オリジナルのサンプルコード（左）と比較すると，ppOpenMATH/VISライブラリ用の宣言
やサブルーチンコール等が増えていることが分かる。

2.with_vis/main.f90
program thermal_conduction_3D
use global_var!C-PPOHVIS-s
USE PPOHVIS_FDM3D_UTIL!C-PPOHVIS-e
implicit none
integer::nt,nstep
double precision::mtime!C-PPOHVIS-s
integer::nx,ny,nz,ierr,L
TYPE(PPOHVIS_BASE_STCONTROL) PCONTROLTYPE(PPOHVIS_FDM3D_STSTRGRID) PSTRGRID
TYPE(PPOHVIS_BASE_STRESULTCOLLECTION) PRESELM,PRESNOD
CHARACTER(LEN=PPOHVIS_BASE_FILE_NAME_LEN) CTLNAME,UCDHEAD!C-PPOHVIS-ecall start_parallel
call load_paramcall allocate_arraycall initial_conditions

・・・

46

２．サンプルコード with ppOpen-MATH/VISの実行
１．2.with_vis/の中のcompileファイルを実行% ./compile
２．すると，run/の中に実行ファイルwith_visが生成。runに移動。
% cd run% ls
control.dat input.dat job.sh results/ with_vis
ppOpen-MATH/VIS用
入力ファイル

実行ファイル

３．バッチジョブ実行で計算% pjsub job.sh
４．実行が終了したらresults/の中にinpファイルが出力されていることを確認

47

演習２
1. 計算結果の出力ファイル（out_temperature.1.inp～out_temperature.10.inp）を
自分のＰＣにダウンロードして，Paraviewで可視化（スナップショット，アニメー
ション等）しなさい。

2. ppOpen-MATH/VISの入力ファイルcontrol.datを自由に書き換えて計算しなさい。
with ppOpen-MATH/VIS
オリジナル

48

Paraviewについて
１．Open Fileからinpファイルを開く際に出てくる
選択肢は「AVS UCD Binary/ASCII Files」を選ぶこと。
２．Apply→Slice→Applyを押した後、上部にある
プルダウンメニューから「temperature」を選択。
３．上部のPlayボタンからアニメーションの作成も可能。このプルダウンメニューから表示方法の変更もできます。
先ほどと出力ファイルのフォーマットが異なるので、paraviewの操作も少し異なることに注意49

プロファイラの利用
自分でプログラムを実装し，実行，可視化ができるようになってくると，より計
算効率のよいコードとなるように，コードの最適化を行いたい場合がある。
プロファイラは性能解析ツールであり，関数呼び出しの頻度や，それにかかる時間，ハードウェアの情報等，プログラム実行時の各種情報を収集する。
つまり，プロファイラを利用することで，コードの中で実行時間のボトルネックとなっている部分を洗い出すことが可能となる。
Oakleaf-FXでは予め富士通製プロファイラがインストールされており，本講習会ではそれを利用する。他のプロファイラとは，プログラムの実装方法などが異なるが，プロファイラの使い方という意味では，概ね変わらない。

50

Oakleaf-FXで利用できるプロファイラ（1/2）＊詳しい利用方法についてはポータルにあるドキュメント参照
https://oakleaf-www.cc.u-tokyo.ac.jp/（Oakleaf-FX利用者支援ポータル→ドキュメント閲覧→プロファイラ利用手引書）• 基本プロファイラ（GUI（Windows/Mac） or テキスト/CSV出力）• 詳細プロファイラ（GUI（Windows/Mac） or テキスト/CSV出力） 1回の実行で，測定区間の基本情報（呼び出し回数，経過時間，CPU時間），MPI
情報，ハードウェアモニタ情報を収集。

• 精密PA可視化（Excel使用（Windows/Mac））
 7回の実行で，パフォーマンス情報，メモリ情報，SIMD情報，キャッシュ情報，
CPU時間情報，命令情報，バランス情報，時間情報を，プロセス毎かつ計測区間
毎に収集。

51

Oakleaf-FXで利用できるプロファイラ（2/2）
詳細プロファイラ（テキスト出力）

精密PA可視化（Excel使用（Windows/Mac））

52

プロファイラの計測範囲の設定例（詳細プロファイラ）
1.original/main.f90
program thermal_conduction_3D
use global_var
implicit none
integer::nt,nstep
double precision::mtime
call start_parallel
call load_paramcall allocate_arraycall initial_conditions
mtime=0.0d0; nstep=0
do nt=1,ntmax
mtime=mtime+dt
call kernelif(mod(nt,nfreq)==0) then・・・

program thermal_conduction_3D
use global_var
implicit none
integer::nt,nstep
double precision::mtime
call fapp_start("pre",1,0)
call start_parallel
call load_paramcall allocate_arraycall initial_conditions
call fapp_stop("pre",1,0)
mtime=0.0d0; nstep=0
do nt=1,ntmax
mtime=mtime+dt

計測したい範囲（計測区間）を専用サブルー
チンで囲う。
引数の1つ目の文字列（任意）と2つめの数字
は囲う範囲で共通，3つ目の数字はゼロにしてください。

call fapp_start("kernel",2,0)
call kernel
call fapp_stop("kernel",2,0)

if(mod(nt,nfreq)==0) then・・・

精密PA可視化（Excel使用）の場合（4.with_prof_excel/main.f90）
もサブルーチン名と引数（文字列のみ）は異なるが同様に実装。

3.with_prof_txt/main.f90

53

３．サンプルコード with 詳細プロファイラ（テキスト出力）の実行
１．3.with_prof_txt/の中のcompileファイルを実行% ./compile

２．すると，run/の中に実行ファイルwith_prof_txtが生成。run/に移動。
% cd run% lsconv input.dat job.sh prof_data/ results/ with_prof_txt
プロファイルデータ変換用
実行ファイルプロファイルデータ
出力ディレクトリ

実行ファイル

３．バッチジョブ実行で計算% pjsub job.sh
４．実行が終了したら，prof_data/のプロファイルデータをテキストへ変換するために，
convファイルを実行，するとoutput_prof.txtが生成される。
% ./conv
54

４．サンプルコード with 精密PA可視化（Excel使用）の実行（1/2）
１．4.with_prof_excel/の中のcompileファイルを実行% ./compile
２．すると，run/の中に実行ファイルwith_prof_excelが生成。run/に移動。
% cd run% lsconv FSDT_CPUPA.xlsm input.dat job.sh pa1/ pa2/ pa3/
pa4/ pa5/ pa6/ pa7/ results/ with_prof_excel

３．バッチジョブ実行で計算% pjsub job.sh
４．実行が終了したらconvファイルを実行。するとoutput_prof_1.csv～
output_prof_7.csvが生成される。
% ./conv

55

４．サンプルコード with 精密PA可視化（Excel使用）の実行（2/2）
５．output_prof_1（～7）.csvとFSDT_CPUPA.xlsmファイルを自分のＰＣの同
じフォルダダウンロード。
６．FSDT_CPUPA.xlsmをダブルクリックしてExcelを開くと，以下の図のように，プロ
セス番号，計測区間の順にそれらの指定についてのダイアログが開くので，それぞれ見たいプロセスと計測区間を指定する。
計測区間指定ダイアログ
プロセス番号指定ダイアログ

56

演習３
1. 詳細プロファイラ（テキスト出力），または精密PA可視化（Excel使用）により，プロファイルを収集・観測しなさい。（Linuxでは精密PA可視化は使えません。）
2. ソースファイルmain.f90を書き換え，計測区間を自由に変更してプロファイルを収集しなさい。

57