並列有限要素法による 三次元定常熱伝導 ...€¦ · •...
TRANSCRIPT
並列有限要素法による三次元定常熱伝導解析プログラム
並列可視化
中島研吾
東京大学情報基盤センター
RIKEN AICS HPC Spring School 2014
自動チューニング機構を有するアプリケーション開発・実行環境
ppOpen‐HPC
中島研吾東京大学情報基盤センター
佐藤正樹(東大・大気海洋研究所),奥田洋司(東大・新領域創成科学研究科),
古村孝志(東大・情報学環/地震研),岩下武史(京大・学術情報メディアセンター),
阪口秀(海洋研究開発機構)
背 景(1/2)• 大規模化,複雑化,多様化するハイエンド計算機環境の能力を充分に引き出し,効率的なアプリケーションプログラムを開発することは困難
• 有限要素法等の科学技術計算手法:
– プリ・ポスト処理,行列生成,線形方程式求解等の一連の共通プロセスから構成される。
– これら共通プロセスを抽出し,ハードウェアに応じた最適化を施したライブラリとして整備することで,アプリケーション開発者から共通プロセスに関わるプログラミング作業,並列化も含むチューニング作業を隠蔽できる。
– アプリケーションMW,HPC‐MW,フレームワーク
pFEM‐VIS 3
背 景(2/2)• A.D.2000年前後
– GeoFEM,HPC‐MW– 地球シミュレータ,Flat MPI,FEM
• 現在:より多様,複雑な環境
– マルチコア,GPU– ハイブリッド並列
• MPIまでは何とかたどり着いたが・・・
• 「京」でも重要
– CUDA,OpenCL– ポストペタスケールからエクサスケールへ
• より一層の複雑化
pFEM‐VIS 4
Vis.LinearSolver
MatrixAssembleI/O
HPC-MW for T2K
Vis.LinearSolver
MatrixAssembleI/O
HPC-MW for T2K
FEM code developed on PCI/F forVis.
I/F forSolvers
I/F forMat.Ass.
I/F forI/O
FEM code developed on PCI/F forVis.
I/F forSolvers
I/F forMat.Ass.
I/F forI/O
I/F forVis.
I/F forSolvers
I/F forMat.Ass.
I/F forI/O
Vis.LinearSolver
MatrixAssembleI/O
HPC-MW for Next Generation Supercomputer
Vis.LinearSolver
MatrixAssembleI/O
HPC-MW for Next Generation Supercomputer
Vis.LinearSolver
MatrixAssembleI/O
HPC-MW for Earth Simulator
Vis.LinearSolver
MatrixAssembleI/O
HPC-MW for Earth Simulator
Hybrid並列プログラミングモデルMPI+”X”
• Message Passing– MPI
• Multi Threading– OpenMP– CUDA, OpenCL
5
OpenMP/MPI Hybrid
corecorecorecorem
emor
y corecorecorecorem
emor
y corecorecorecorem
emor
y corecorecorecorem
emor
y corecorecorecorem
emor
y corecorecorecorem
emor
y
mem
ory
mem
ory
mem
ory
core
core
core
core
core
core
core
core
core
core
core
core
Flat MPI
pFEM‐VIS 5
HPCミドルウェア:何がうれしいか
• アプリケーション開発者のチューニング(並列,単体)からの解放
– SMASHの探求に専念
• 一生SMASHと付き合うのはきつい
– SMASHをカバー
• コーディングの量が減る
• 教育にも適している
• 問題点
– ハードウェア,環境が変わるたびに最適化が必要となる
HHardwareardware
SSoftwareoftware
AAlgorithmlgorithm
MModelingodeling
SSciencecience
6
pFEM‐VIS 6
Key-Issues for Appl’s/Algorithms towards Post-Peta & Exa Computing
Jack Dongarra (ORNL/U. Tennessee) at SIAM/PP10
• ヘテロジニアスなアーキテクチャ:Hybrid/Heterogeneous Architecture– Multicore + GPU– Multicore + Manycore (more intelligent)– Multicore + GPU + Manycore
• 混合精度演算:Mixed Precision Computation• 自動チューニング:Auto-Tuning/Self-Adapting• 耐故障性:Fault Tolerance• 通信削減アルゴリズム:Communication Reducing
Algorithms
ppOpen‐HPC:概要• ヘテロジニアスなアーキテクチャによる計算ノードを有するポストペタスケールシステムの処理能力を充分に引き出す科学技術アプリケーションの効率的な開発,安定な実行に資する
– pp= post petascale– Five Key‐Issuesを考慮
• 東大情報基盤センターに2015年度に導入予定の数10 PFLOPS級システム(ポストT2K,Intel MIC/Xeon‐Phiベース)を最終的なターゲット:
– スパコンユーザーの円滑な移行支援
– T2K,東大FX10,京– TSUBAME
pFEM‐VIS 8
ppOpen-HPC:基本的方針
• 対象離散化手法による分類(次ページ)
• ハードウェアに依存しない共通インタフェースを有するアプリケーション開発用ライブラリ群,耐故障機能を含む実行環境を提供
– 各離散化手法の特性に基づく
– SC11:10種類以上のプロセッサアーキテクチャ
• 自動チューニング技術により,様々な環境下における最適化ライブラリ・アプリケーション自動生成を目指す
• 数値ライブラリ,システムソフトウェア,アプリケーションの専門家の協力:Co-Design
• 既存ソフトウェア資産(e.g. HEC-MW)の効率的利用
• 実際に動いているアプリケーションから機能を切り出す
対象とする離散化手法局所的,隣接通信中心,疎行列
10pFEM‐VIS
112013‐01pFEM‐VIS
Code developed on ppOpen-HPC12
Program My_pFEMuse ppOpenFEM_utiluse ppOpenFEM_solver
call ppOpenFEM_initcall ppOpenFEM_cntlcall ppOpenFEM_meshcall ppOpenFEM_mat_init
docall ppOpenFEM_mat_asscall ppOpenFEM_mat_bccall ppOpenFEM_solvecall ppOPenFEM_visTime= Time + DT
enddo
call ppOpenFEM_finalizestopend
2013-01
pFEM‐VIS 12
ppOpen‐HPC:何を作るか(1/2)• ppOpen‐APPL
– 各手法個別の並列プログラム開発用ライブラリ群またはテンプレート
• ①共通データ入出力インタフェース
• ②領域間通信
• ③係数マトリクス生成
• ④離散化手法の特性を考慮した前処理付き反復法
• ⑤適応格子,動的負荷分散
pFEM‐VIS 13
ppOpen‐HPC:何を作るか(2/2)• ppOpen‐MATH
– 各手法に共通の数値演算ライブラリ群,単独利用可
• ppOpen‐AT– 自動チューニング(AT)コンパイラ:Directive Base
• 最適化ライブラリ群,アプリケーションを自動生成
• OpenFOAM,PETSc等オープンソースアプリ・ライブラリも対象
• Hybrid,CUDA,OpenCL (OpenACC)• メモリアクセス最適化に主眼+通信最適化も検討
• CPU~GPU/Manycore負荷分散
• ppOpen‐SYS– ノード間通信,耐故障機能関連ライブラリ群
pFEM‐VIS 14
ppOpen‐HPC:何がうれしいか
• アプリ開発者を以下から解放
– ハイブリッド並列化・CUDA・OpenCL等のプログラミング
– ハードウェアに依存したチューニング,ホストCPU~アクセラレータ間の負荷分散等
• ハードウェア依存のチューニングのプロセスは全てppOpen‐ATに集約されるため,計算機環境が変化しても,ppOpen‐ATのみを変更すれば良い
pFEM‐VIS 15
ppOpen‐HPC:特徴,新規性
• 汎用性・可搬性,使いやすさと高効率の両立
– 科学技術アプリの最適化→個別対応:限界がある
• 離散化手法による分類,対象の絞り込み
– それぞれの手法に応じた最適化• データ構造の特徴を最大限利用
• 離散化手法による最適化アプローチの相違(例:疎行列)
• 自動チューニング:ppOpen‐AT– メモリアクセス最適化,Host Processor~Co‐Processors負荷分散
– 新しいアーキテクチャ,計算機環境への柔軟な対応
– アプリケーション開発者だけでなくライブラリ開発者の負担も大きく軽減できる,オープンソースアプリ・ライブラリ(例:OpenFOAM,PETSc)もターゲット,他プロジェクトとの連携も容易
• 関連研究(Sphere,OpenMM)
pFEM‐VIS 16
体制
• 数値ライブラリ,システムソフトウェア,アプリケーションの専門家による協力,Co‐Design– 東大ITC ppOpen‐MATH,ppOpen‐AT,ppOpen‐SYS– 東大AORI ppOpen‐MATH/MP,ppOpen‐APPL/FVM– 東大CIDIR ppOpen‐APPL/FDM– 東大FS ppOpen‐APPL/FEM,混合精度演算手法
– 京大 ppOpen‐APPL/BEM– JAMSTEC ppOpen‐APPL/DEM,通信削減Algorithm
• 各分野で既に先端的な研究実績,開発経験– GeoFEM,HPC‐MW,ABCLibScript– ハイブリッド並列プログラミングモデル,カップリング,自動チューニング,並列多重格子法,GPU
pFEM‐VIS 17
pFEM‐VIS 18
マイルストーン=動くソフトウェアの公開公開内容 趣旨,目標 ターゲットマシン 開発環境
H24秋 ppOpen-APPLプロトタ
イプ(適応格子・動的
負荷分散を除く),領
域分割ユーティリティ,
ppOpen-MATH/VIS・ppOpen-AT/STATIC プ
ロトタイプ
ppOpen-APPL , ppOpen-AT が
様々なマルチコアクラスタで
稼働することを検証する。大
学(学部,大学院)講義への
導入,講習会開催を継続的に
実施する。
東大T2K東大FX10京コンピュータ
Cray XKシリーズ
東大T2K東大FX10京コンピュータ
H25秋 ppOpen-HPC(ppOpen-AT / DYNAMIC を 除
く)
ppOpen-HPC の 各 機 能
(ppOpen-AT/DYNAMICを除
く)をこの時期までに一通り
完成する。実アプリケーショ
ンへ適用することにより更な
る改良を図る。
東大FX10京コンピュータ
Xeon Phiクラスタ
Cray XKシリーズ
GPUマシン
東大FX10京コンピュータ
Xeon Phiクラスタ
開発用システム
(GPU, AMD)
H26秋 ポストペタスケールシ
ス テ ム 向 け ppOpen-HPCプロトタイプ
ターゲットとするポストペタ
スケールシステム(東大ppシステム)向け。
東大ppシステム
GPUマシン
東大FX10京コンピュータ
Xeon Phiクラスタ
開発用システム
H27秋 ポストペタスケースシ
ス テ ム 向 け ppOpen-HPC完成版
H26秋に公開したppOpen-HPCを実アプリケーションへ適用
することにより,更に改良,
最適化した最終バージョンを
公開する。
東大ppシステム
GPUマシン
東大ppシステム
東大FX10京コンピュータ
Xeon Phiクラスタ
開発用システム
第1回公開 2012 Fall(1/2)• マルチコアクラスタ向け
• Flat MPI,OpenMP/MPI Hybridに対応
• SC12@SLCに合わせて公開,配布(英文DOC(のみ))
pFEM‐VIS 19
Component Archive Flat MPI OpenMP/MPI C F
ppOpen‐APPL/FDM ppohFDM_0.1.0 ○ ○
ppOpen‐APPL/FVM ppohFVM_0.1.0 ○ ○ ○
ppOpen‐APPL/FEM ppohFEM_0.1.0 ○ ○ ○ ○
ppOpen‐APPL/BEM ppohBEM_0.1.0 ○ ○ ○
ppOpen‐APPL/DEM ppohDEM_0.1.0 ○ ○ ○
ppOpen‐MATH/VIS ppohVIS_FDM3D_0.1.0 ○ ○ ○
ppOpen‐AT/STATIC ppohAT_0.1.0 ‐ ‐ ○ ○
第1回公開 2012 Fall(2/2)pFEM‐VIS 20
Component 内容
ppOpen‐APPL/FDM • 二次元・三次元陽解法コード開発環境(Flat MPI)• 固体力学
ppOpen‐APPL/FVM • 三次元陽解法コード開発環境・領域分割ツール:四面体,三角柱• 圧縮性流体力学
ppOpen‐APPL/FEM • 有限要素法コード開発環境・領域分割ツール:各種要素• 弾性静力学
ppOpen‐APPL/BEM • 密行列による汎用境界要素法コード開発環境• 表面電荷法テンプレート
ppOpen‐APPL/DEM • 個別要素法コード開発環境• 三次元重力落下
ppOpen‐MATH/VIS • 三次元差分格子向けリアルタイム可視化ライブラリ(Flat MPI)
ppOpen‐AT/STATIC • 自動チューニング向けプリプロセッサ• ppOpen-APPL/FDM,ppOpen-APPL/BEMで検証済み
http://ppopenhpc.cc.u-tokyo.ac.jp/
What is new in Ver.0.2.0 ?http://ppopenhpc.cc.u-tokyo.ac.jp/
• Available in SC13 (or can be downloaded)
21
Component New Development
ppOpen‐APPL/FDM• OpenMP/MPI Hybrid Parallel Programming Model• Intel Xeon/Phi Version• Interface for ppOpen‐MATH/VIS‐FDM3D
ppOpen‐APPL/FVM • Optimized Communication
ppOpen‐APPL/FEM • Sample Implementations for Dynamic Solid Mechanics
ppOpen‐MATH/MP‐PP • Tool for Generation of Remapping Table in ppOpen‐MATH/MP
ppOpen‐MATH/VIS • Optimized ppOpen‐MATH/VIS‐FDM3D
ppOpen‐AT/STATIC• Sequence of Statements, Loop Splitting (Optimized)• ppOpen‐APPL/FVM• ppOpen‐APPL/FDM・BEM
22
ppOpen‐APPL/FVM• 3D圧縮性流体向け機能:実コードから切り出し
– 辺ベース有限体積法,陽解法
– 三角柱,四面体要素(一次)
– データ入出力
– 辺情報(コネクティビティ,投影面積等)
– 領域間通信・MPI関数代用
– 簡易領域分割ユーティリティ(独立)
• サンプルプログラム: hybNS– 積分実施部分
– 二次・四次人工粘性
– 例題データ作成ツール:球面周囲
E1
E2
C
E1
E2
C
pFEM‐VIS
23
ppOpen‐MATH/VIS• ボクセル型背景格子を使用した大規模並列可視化手法〔Nakajima & Chen 2006〕に基づく
– 差分格子用バージョン公開:ppOpen‐MATH/VIS‐FDM3D
• UCD single file• プラットフォーム
– T2K,Cray– FX10– Flat MPI
• Hybrid,非構造格子:今年度実施
[Refine]AvailableMemory = 2.0 Available memory size (GB), not available in this version.MaxVoxelCount = 500 Maximum number of voxelsMaxRefineLevel = 20 Maximum number of refinement levels
pFEM‐VIS
24
pFEM3D + ppOpen‐MATH/VISpFEM‐VIS
コピー>$ cd <$O-TOP>>$ cp /home/ss/aics60/2014SpringSchool/pVIS.tar .>$ tar xvf pVIS.tar
FORTRANユーザー>$ cd <$O-TOP>/pVIS/F/src>$ make>$ cd ../run>$ pjsub go.sh
Cユーザー>$ cd <$O-TOP>/pVIS/C/src>$ make>$ cd ../run>$ pjsub go.sh
25
MakefilepFEM‐VIS
FFLAGSL = -I/home/ss/aics60/ppohVIS/includeFLDFLAGSL = -L/home/ss/aics60/ppohVIS/libLIBSL = -lfppohvisfdm3d -lppohvisfdm3d
.SUFFIXES:
.SUFFIXES: .o .c
.c.o:$(CC) -c $(CFLAGS) $(CFLAGSL) $< -o $@
TARGET = ../run/pfem3d_test
OBJS = ¥test1.o ...
all: $(TARGET)
$(TARGET): $(OBJS)$(CC) -o $(TARGET) $(CFLAGS) $(CFLAGSL) $(OBJS)
$(LDFLAGSL) $(LIBS) $(LIBSL)rm -f *.o *.mod
26
<$O-TOP>/pVIS/F(C)/runpFEM‐VIS
cube_20x20x20_4pe_kmetis.0cube_20x20x20_4pe_kmetis.1cube_20x20x20_4pe_kmetis.2cube_20x20x20_4pe_kmetis.3cube_20x20x20_4pe.out
go.shINPUT.DATvis.cntvis_temp.1.inp
cube_20x20x20_4pe_kmetis20001.0 1.01.0e-08
#!/bin/sh
#PJM -L "rscgrp=school"#PJM -L "node=4"#PJM --mpi "proc=4"#PJM -L "elapse=00:05:00"#PJM -j#PJM -o "cube_20x20x20_4pe.out"
mpiexec ./pfem3d_test
27
pFEM3D + ppOpen‐MATH/VISpFEM‐VIS
<HEADER>.*
局所分散メッシュファイル
pfem3d_test
INPUT.DAT
test.inpvis_temp.1.inp
ParaView 出力:名称固定
vis.cnt
28
Fortran/main (1/2)pFEM‐VIS
use solver11use pfem_utiluse ppohvis_fdm3d_util
implicit REAL*8(A-H,O-Z)type(ppohVIS_FDM3D_stControl) :: pControltype(ppohVIS_FDM3D_stResultCollection) :: pNodeResulttype(ppohVIS_FDM3D_stResultCollection) :: pElemResultcharacter(len=PPOHVIS_FDM3D_FILE_NAME_LEN) :: CtrlNamecharacter(len=PPOHVIS_FDM3D_FILE_NAME_LEN) :: VisNamecharacter(len=PPOHVIS_FDM3D_LABEL_LEN) :: ValLabelinteger(kind=4) :: iErr
CtrlName = ""CtrlName = "vis.cnt"
VisName = ""VisName = "vis"
ValLabel = ""ValLabel = "temp"
call PFEM_INIT
call ppohVIS_PFEM3D_Init(MPI_COMM_WORLD, iErr)call ppohVIS_PFEM3D_GetControl(CtrlName, pControl, iErr);call INPUT_CNTLcall INPUT_GRID
call ppohVIS_PFEM3D_SETMESHEX( && NP, N, NODE_ID, XYZ, && ICELTOT, ICELTOT_INT, ELEM_ID, ICELNOD, && NEIBPETOT, NEIBPE, IMPORT_INDEX, IMPORT_ITEM, && EXPORT_INDEX, EXPORT_ITEM, iErr)
29
Fortran/main (2/2)pFEM‐VIS
call MAT_ASS_MAINcall MAT_ASS_BC
call SOLVE11
call OUTPUT_UCD
call ppohVIS_PFEM3D_ConvResult(N, ValLabel, X, && pNodeResult, pElemResult, iErr)call ppohVIS_PFEM3D_Visualize(pNodeResult, pElemResult, pControl, && VisName, 1, iErr)
call ppohVIS_PFEM3D_Finalize(iErr)
call PFEM_FINALIZE
end program heat3Dp
30
C/main (1/2)pFEM‐VIS
#include <stdio.h>#include <stdlib.h>FILE* fp_log;#define GLOBAL_VALUE_DEFINE#include "pfem_util.h"#include "ppohVIS_FDM3D_Util.h"extern void PFEM_INIT(int,char**);extern void INPUT_CNTL();extern void INPUT_GRID();extern void MAT_CON0();extern void MAT_CON1();extern void MAT_ASS_MAIN();extern void MAT_ASS_BC();extern void SOLVE11();extern void OUTPUT_UCD();extern void PFEM_FINALIZE();int main(int argc,char* argv[]){
double START_TIME,END_TIME;struct ppohVIS_FDM3D_stControl *pControl = NULL;struct ppohVIS_FDM3D_stResultCollection *pNodeResult = NULL;
PFEM_INIT(argc,argv);
ppohVIS_PFEM3D_Init(MPI_COMM_WORLD);pControl = ppohVIS_FDM3D_GetControl("vis.cnt");
INPUT_CNTL();INPUT_GRID();
if(ppohVIS_PFEM3D_SetMeshEx(NP,N,NODE_ID,XYZ,ICELTOT,ICELTOT_INT,ELEM_ID,ICELNOD,NEIBPETOT,NEIBPE,IMPORT_INDEX,IMPORT_ITEM,EXPORT_INDEX,EXPORT_ITEM)) {
ppohVIS_FDM3D_PrintError(stderr);};
31
C/main (2/2)pFEM‐VIS
MAT_CON0();MAT_CON1();
MAT_ASS_MAIN();MAT_ASS_BC() ;
SOLVE11();
OUTPUT_UCD();
pNodeResult = ppohVIS_PFEM3D_ConvResult(N, "temp", X);
if(ppohVIS_PFEM3D_Visualize(pNodeResult, NULL, pControl, "vis", 1)) {ppohVIS_FDM3D_PrintError(stderr);
}
ppohVIS_PFEM3D_Finalize();
PFEM_FINALIZE() ;}
32
vis.cntpFEM‐VIS
[Refine] 細分化制御情報セクションAvailableMemory = 2.0 利用可能メモリ容量(GB)not in useMaxVoxelCount = 1000 Max Voxel #MaxRefineLevel = 20 Max Voxel Refinement Level[Simple] 簡素化制御情報セクションReductionRate = 0.0 表面パッチ削減率
1.52 MB8,000 elements, 10,334 nodes
.385 MB, 813 elements, 6,504 nodes