NEC のFortranへの取組み
並列化を中心として
2015 年8月18日
NEC 林 康晴
内容
• Fortran 利点
• Fortran ン イ SX シ ー
• 最新 型 ー ー ン ュータSX-ACE
• SX Fortran ン イ
• 自動 化・自動共有並列化
• SX 半自動分散並列化
• 次世代 ー ー ン ュータ Fortran
Fortran 利点
▌ 膨大 資産 相 ,科学技術計算分野 い ,今後
く ,主要 言語 一
( 多次元)配列 記述 やすい
•各次元 上下限値 合わ 自由 宣言
科学技術計算向 組込 関数 豊富 用意 い
•各 ッ ー 向け 最適化 関数を手軽 利用可能
•総称名 ,引数 型 応 呼び分け 不要
ン イ 最適化 やすい場合 多い
•多次元配列記述 ほう , ン イ 最適化 容易
•規格上 け く,慣例上,aliasを無視出来 場合 多い
•その他, 意識すれば C 回避可能な場合が多いが…
C 例:
unsigned int i; long k;for(i=0; i < n ; i++){
k = i*2;
a[k] = sin(b[i]) + cos(b[i]);
Fortran ,sin・cosを同時 計
算 自動最適化を行う ,C ,
規格上 引数 ーチ ッ 必要
i*2 ー ー ー 可能性 あ
, ー 制御変数 認識
,自動ベ 化 い
Fortran ン イ SX シ ー
▌ SX シ ー 高性能を 誰 簡単
自動化 + 必要 応 ー 指示 (指示行,翻訳時 ン)
SX ー 最適化 C/C++ 及び MPI 提供
HPF/SX V2
(HPF2.0+HPF/JA+F95)
半自動分散並列化
FORTRAN90/SX
SMP
(SX-3~)
自動共有並列化
ベ 命令
(SX-1/2~)
HPF/SX
(HPF1.0+F77)
FORTRAN77/SX
SMP タ
(SX-4~)
1985 1990 1994
Fortran 2003
自動ベ 化
▌ 高い実効性能 低消費電力・省 ー を両立
低消費電力
世界 ップ スの省エネス コン
省スペ ス
お客様フロアコス の削減
ビッ コアによる高い実効性能
世界 ップ スの CPU コア性能 64GFLOPS
世界 ップ スの ン 幅 64 ~ 256GB/s
従来機比
同演算性能で
1
10
従来機比
同演算性能で
1
5
SX-DNA
の継承
最新 型 ー ー ン ュータSX-ACE
SX-ACE 用意す Fortran ン イ
▌ 自動 化・自動共有並列化
▌ GUI イ ・ ッガ
▌ SX-ACE 最適化 科学技術計算 イ を多数用意
ASL ( 数値計算),ASLSTAT (統計計算),MathKeisan (線型代数,FFT,固有値)
FORTRAN90/SX
Fortran 95 規格
NEC Fortran 2003
Fortran 2003 規格
Fortran 2003 規格 一部
例外 及び IEEE算術,
C 相互利用可能性,
一部 組込 手続等,
指向関連を除く機能
Fortran 2008 規格 一部
BLOCK 構文,型束縛手続,
一部 組込 手続等
GUI イ Ftrace Viewer
▌ ネッ を効率的 抽出可能
例) 実行時間(棒 ) ベ 化率(折 線 ) 表示
手続calc2 実行時間 長く,ベ 化率 低い事 わ
Fortran ン イ 最適化
▌ 各種最適化を多段階 適用後, 化・共有並列化
例) 配列式 化・共有並列化
a(1:n,1:m) = b(1:n,1:m)*c(1:n,1:m) s = sum(b(1:n,1:m)*c(1:n,1:m))
配列式 ー 化
組込 関数 イン イン展開
do j=1,m do i=1,n
a(i,j) = b(i,j)*c(i,j) s = s + b(i,j)*c(i,j) enddo
enddo
共通式削除
do j=1,m do i=1,n
a(i,j) = b(i,j)*c(i,j) s = s + a(i,j) enddo
enddo
共有並列化 化 ー 変形( ー 交換,アン ー
ン , ー 一重化等) や 行列
積 ー イ へ 置換
共通式削除,演算順序変更,不
変式 ー 外追出 等 最適
化 ,各 ー 繰返 実施
do j=1,m do i=1,n
a(i,j) = b(i,j)*c(i,j) enddo
enddo do j=1,m do i=1,n
s = s + b(i,j)*c(i,j) enddo
enddo
ー 融合
Fortran ン イ 自動 化
▌ 効率的 演算 最適化を継続的 強化
例) 配列 隣接要素を引用 ー ア 回数を削減
... 254 255 256 3
2
1 ...
b(i-1)
do i = 2, nx-1
a(i) = p * b(i-1) + q * b(i) + p * b(i+1) enddo
-pvctl neighbors オ ション指定時
b(1:256) b(2:257) b(3:258)
b(i) b(i+1)
ベ タ
配列b
• 256要素 ー 3 回
• ベ 長256 ベ 演算
... 254 255 256 3
2
1 ...
b(i-1)
b(1:256) b(2:256) b(3:256)
b(i) b(i+1)
配列b
• 256 要素 ー 1 回
• ベ 長254 ベ 演算
VMOVE命令 VMOVE命令
a(2:257) (256 要素 ) を計算 a(2:255) (254 要素 ) を計算
ー ー
既定値
© Nどで でorporatろon 2ごさす
Fortran ン イ 自動共有並列化
▌ 実用的 自動共有並列化を,黎明期(SX-3; 1990年発売)
例 ) SX ー ー 最適化 条件並列化
SX-5 (1998 年発売) 以降 ,OpenMP 手動並列化 ー
do i = 1,nx aa = a bb = b do j = 1,ny aa = aa + x(i+1) * g(j-1) bb = bb + x(i-1) * g(j-1) enddo
y(ic+i) = -aa y(id+i) = -bb enddo
if((nx*ny > n) .and. (id-ic==0 .or. abs(id-ic)>=nx))then call para$sub() ! 並列 ー
else
do i = 1,nx ! 非並列 ー aa = a
bb = b do j = 1,ny aa = aa + x(i+1) * g(j-1) bb = bb + x(i-1) * g(j-1) enddo
y(ic+i) = -aa y(id+i) = -bb enddo
endif
閾値n ,SX上 性能向上 す 場合 並列化
並列化可能 を判定
SX 上 半自動分散並列化
▌ High Performance Fortran (HPF)
産学協同 ー ン 拡張仕様HPF/JA ー
全自動
○
○
○
自動
× 手動
○ 半自動
×
×
○
×
○
○
HPF
+ 指示文
手動
×
× ×
MPI
イ
ータ ッ ン
並列化・処理分担
通信
Coarray
(Fortran 2008)
言語拡張
XMP
+ 指示文
HPF 利点
ー 改変 容易 Fortran( 物理 逐次処理) ・ア ベ 変更 可能
並列化方法 変更 容易 1 次元分割→2次元分割 ア 並列化 分離
ッ 比較的容易 Fortran( 逐次処理) ベ 可能
ー 並列化 容易 煩雑 通信・同期を記述 く 良い
必要 応 ,指示行・代入文 記述可能
HPF/SX V2 特徴
▌ 自動分散並列化機能
集計計算(SUM, MAXLOC等)を含 ー 自動並列化・通信生成
袖領域 自動割付け,通信情報再利用 高速化
▌ HPF2.0 仕様 加え、 拡張仕様を ー
主要 HPF公認拡張仕様、HPF/JA拡張仕様
部分的 袖通信,不規則問題(有限要素法等)向け独自拡張仕様等
▌ HPF 向け ッ 、チューニン 機能
分散並列化情報 、 ッ ー
HPF 向け ッ 用 ン
▌ 上級者向け機能
部分的 MPI を利用 チ ーニン 可能
SX 持 3 階層 並列性を利用可能( イ ッ 並列化)
• ベ 化,共有並列化( ー 内),分散並列化( ー 間/ ー 内)
HPF 利用成果 2002年 ー ン 賞 言語賞 受賞
“さじ.9TなばOPS Tれrらら-dimensional Fluid Simulation for Fusion Science
with HPF on tれら どartれ Sろmu」ator”, Hろtosれろ Sakagami, et al.
ソース規模 1334 行 対し、 HPF 指示文 45 行 (3.4%) を挿入し、並列化
14.9TFLOPS ( 実効効率 45%) 、自動並列化言語 し 驚異的 評価
ー ン・ベ 賞
・IEEE ン ータ部会 運営
・並列 ン ータを実用的 科学技術計算 応用 、
性能を含 最 優 成果を出 者を毎年表彰
核融合3次元
流体 ー ン
坂上仁志先生ほ
HPF/ES
初代地球 ータ
14.9 TFLOPS
大規模並列計算
HPF 有効 あ を実証
HPF 普及 い い主 理由
初期 ン イ 未成熟 → 成熟
HPF1.0 機能不足 → HPF2.0 + HPF/JA仕様 強化
互換性 欠如
ー ン イ ,HPFPC配布 fhpf
HPF 使用 い場合,逐次 実行可能
向 ・不向 あ
ータ構造 不規則 適用 い
向い う 分 くい
チューニン 難
う く並列化 い う 分 い
うチ ーニン い 分 くい
分散並列化情報 提供
ソー 、分散並列化状況・通信発生状況を確認可能
デ機能: “だS>”等 ー をgrepす こ ,問題箇所を ッ ッ 可能
デ教育: 利用者講習会 ,チューニン 方法を解説
( 1 ) subroutine sub(a,inew,iold) ( 2 ) real a(100,100,2)
( 3 ) !HPF$ DISTRIBUTE a(*,BLOCK,*) ( 4 ) <S>--- do j=1,100
COMM: SFT [a] [LINO: 5 in sample.F] ( 5 ) <N>--- do i=1,100
( 6 ) | a(i,j,inew)=a(i,j-1,iold)+a(i,j,iold) ( 7 ) +--- enddo
( 8 ) enddo ( 9 ) end
並列化可能 並列化 ー (<N>)
並列化 い 判定 ー (<S>)
並列化可能 場合、INDEPENDENT指示文を指定
並列化 可能性あ
通信発生箇所(COMM:)
ータ ッ ン を変え 、並列化 可能性あ
多く 場合 性能低下 主因
ON指示文等 指定 通信を
削減 可能性あ
SX-ACE 主 強化項目(1) ータ分散指定オ ション
例)
2
3 1
DISTRIBUTE (*,BLOCK,BLOCK)
▐ ータ分散を指定 翻訳時オ ション
3次元配列の2次元目 3次元目をBLOCK分散する場合
%> sxhpf -Mautodist=rank3:011 sample.hpf
既定値 ,全配列を最後 次元 BLOCK分散 ( 分散指定 い配列 )
=rank? を指定 場合,?次元配列を最後 次元 BLOCK分散
=rank?:n を指定 場合,2進整数n 1 対応 次元をBLOCK分散
書式 -Mautodist[=rank?[:n]]
い い ータ分散を気軽 試
規則的 ータ構造 ー , ン 並列化 場合
SX-ACE 主 強化項目(2) HPFソー 生成オ ション
▐ HPF ソー を自動生成す 翻訳時オ ション
例)
real, dimension(100,100) :: a,b,c
!hpf$ distribute (*,*) :: a ! 非分散 do j=1,100
do k=1,100 do i=1,100
c(i,j) = c(i,j) + a(i,k)*b(k,j) enddo
enddo enddo
real, dimension(100,100) :: a,b,c
!hpf$ distribute a(*,*) ! 非分散
!hpf$ distribute b(*,block)
!hpf$ distribute c(*,block) do j=1,100
do k=1,100 do i=1,100
c(i,j) = c(i,j) + a(i,k)*b(k,j) enddo
enddo enddo
sample.hpf
sample.hpf.src
%> sxhpf -Mautodist -Mhpfout sample.hpf
配列 最後 次元を分割す HPF指示文を挿入 ソー を生成
-Mhpfout
書式
出力さ たソースをベース ,チューニングを行うこ
データ分散 指定し忘 ミス防止 も有効
-Mautodist ン 指定 ータ分散入 ソー を出力
小規模~大規模 対応
ー 構成
更 省電力・省 ー
SX シ ー 高性能 使い勝手を継承・発展
高 性能・高 ータ 性能(高 ン 幅)
オー ン技術 融合
次世代 ー ー ン ュータ( ー 名: Aurora) 開発 着手
領域 ン
ー 領域
領域を拡大
次世代 Fortran ン イ
P e rf o rm a n c e
1990 2000 2010
SX-1/2
SX-3
SX-4
SX-5
SX-6
SX-8/8R
SX-9
チ ッ
チ ー
ECO チ ア ン
SX-7
分散並列化
ES
自動ベ 化
自動共有並列化
科学技術計算 主力言語 ,
SX ー 使い易 を継承 ,
標準 規格を ー ン
イ をAurora ー 予定
FORTRAN77/SX FORTRAN90/SX Fortran 2003
compiler
HPF/SX HPF/SX V2
FORTRAN90/ES HPF/ES
ADB