2.8 核融合プラズマ流体解析コード GT5D および GKV の性能測定

2.8 核融合プラズマ流体解析コード GT5D および GKV の性能測定
日本原子力研究開発機構 井戸村 泰宏、伊奈 拓也、朝比 祐一
名古屋大学 前山 伸也
富士通株式会社 三吉 郁夫、千葉 修一
2.8.1 はじめに
核 融 合 プラズマ流 体 解 析 コード GT5D および GKV は磁 場 閉 じ込 め型 の核 融 合 炉 における炉
心 プラズマの閉 じ込 め性 能 を決 定 する乱 流 輸 送 現 象 の評 価 を目 的 として開 発 された。 核融合プ
ラズマの第一原理モデルは 5 次元位相空間(3 次元空間×2 次元速度)におけるプラズマ粒子分布の発展
を記述する移流・拡散方程式(ボルツマン方程式)で与えられる(スライド p3、以降、ページ番号のみ
表記する)。核融合プラズマ流体解析ではこの方程式を 5 次元格子上で離散化して CFD スキームを適用
するため、3 次元流体モデルに比べて〜1002倍程度大きい自由度の流体計算となる。「京」を用いてよう
やく ITER 規模の炉心プラズマの数値実験を水素、あるいは、重水素のみの単一イオン種のイオン系乱
流に対して行うことが可能になったが、電子系乱流を含む数値実験、あるいは、重水素と三重水素を燃
料とする核融合反応によってヘリウムが生成される多種イオン系の核燃焼プラズマの数値実験を行うに
は将来のエクサスケールマシンが必要となる。このような大規模計算を実現する上で最新のメニーコア
プロセッサによって構成される超並列環境の利用技術の高度化が必要不可欠となっている。本性能測定
では、特に、FX100 において強化されたキャッシュ機構や新たに機能拡張されたアシスタントコアの利
用技術に焦点を当てて最適化技術の開発およびその有効性検証を行った。
2.8.2 プログラム概 要
GT5D(p4)は炉 心 プラズマ全 体 を計 算 領 域 としてプラズマ乱 流 やプラズマ分 布 の大 域 的 な非
線 形 発 展 を追 跡 する。この特 徴 を活 かして、これまで非 局 所 的 な乱 流 輸 送 現 象 の研 究 や乱 流
輸 送 の装 置 サイズスケーリングの研 究 が行 われてきた。計 算 手 法 としては 5 次 元 移 流 ・拡 散 方 程
式 に差 分 法 を適 用 し、時 間 積 分 に半 陰 解 法 を用 いている。移 流 項 を陰 的 に計 算 する差 分 ・ 陰
解 法 カーネルは共 役 残 差 法 によって実 装 されており、コードの主 要 コストを占 める。並 列 化 手 法
としては MPI と OpenMP を用 いるハイブリッド並 列 モデルを採 用 している。さらに、OpenMP によっ
て実 装 した通 信 スレッドによる通 信 隠 蔽 処 理 、階 層 的 な多 次 元 領 域 分 割 モデル、および、Tofu
ネットワーク向 けのランクマップ最 適 化 を実 装 することによって、「京 」全 系 に至 る強 スケーリングを
達 成 し、約 1000 億 格 子 を用 いる ITER 規 模 の数 値 実 験 が可 能 になった。本 報 告 では GT5D の
差 分 ・陰 解 法 カーネル(GT5D カーネル)を対 象 として FX100 における性 能 測 定 を実 施 する。
GKV(p5)は一 本 の磁 力 線 に沿 った局 所 領 域 を計 算 領 域 として高 解 像 度 のプラズマ乱 流 計
算 を低 コストで行 う。この特 徴 を活 かして、これまで多 くのパラメータスキャンを必 要 とする実 験 デ
ータ解 析 やイオンスケールから電 子 スケールにおよぶマルチスケール乱 流 の研 究 が行 われてきた。
計 算 手 法 としては 5 次 元 移 流 ・拡 散 方 程 式 の磁 力 線 に垂 直 な 2 次 元 方 向 に擬 スペクトル法 、そ
れ以 外 の 3 次 元 方 向 に差 分 法 を適 用 し、時 間 積 分 に陽 解 法 を用 いている。非 線 形 項 を擬 スペ
クトル法 で計 算 するカーネルでは 5 次 元 データに対 して並 列 化 2 次 元 FFT を適 用 するため、高
コストの転 置 通 信 処 理 が必 要 となる。並 列 化 手 法 としては MPI と OpenMP を用 いるハイブリッド
並 列 モデルを採 用 している。さらに、GT5D と同 様 に OpenMP によって実 装 した通 信 スレッドによ
る通 信 隠 蔽 処 理 、階 層 的 な多 次 元 領 域 分 割 モデル、および、Tofu ネットワーク向 けのランクマッ
146 / 253
プ最 適 化 を実 装 することによって、「京 」全 系 に至 る強 スケーリングを達 成 し、約 6000 億 格 子 を用
いるマルチスケール電 子 乱 流 計 算 が可 能 になった。本 報 告 では GKV のスペクトル法 カーネル(G
KV カーネル)を対 象 として FX100 における性 能 測 定 を実 施 する。
2.8.3 通 信 と演 算 のオーバーラップ
「京 」全 系 の強 スケーリングを実 現 する上 で通 信 と演 算 をオーバーラップする通 信 マス ク手 法
が鍵 となる技 術 となっている。p4 に示 す例 では差 分 演 算 、および、2 次 元 FFT の並 列 処 理 にお
ける通 信 オーバーラップの事 例 が示 されている。差 分 演 算 の例 では、通 常 は境 界 データを通 信
してから差 分 演 算 を行 うが、通 信 オーバーラップの場 合 には、差 分 演 算 を境 界 データを参 照 する
周 辺 領 域 とそれ以 外 の中 心 領 域 に分 離 し、後 者 の背 後 で境 界 データの通 信 処 理 を同 時 実 行
する。この事 例 では、差 分 演 算 を中 心 領 域 と周 辺 領 域 で分 離 したが、これ以 外 にも異 なる次 元
方 向 に分 離 する、あるいは、異 なる項 毎 に分 離 するといったバリエーションが考 えられる。一 方 、2
次 元 FFT の例 では、通 常 は全 データの転 置 処 理 を実 行 してから 1 次 元 FFT を実 行 する処 理 を
繰 り返 すが、通 信 オーバーラップの場 合 には、まず、xy 方 向 の 2 次 元 FFT 処 理 を z 方 向 (GKV
カーネルの場 合 には残 りの 3 次 元 方 向 )に分 割 する。次 に、異 なる z 方 向 位 置 の FFT と転 置 処
理 を同 時 実 行 する通 信 オーバーラップをパイプライン的 に繰 り返 すことで、高 コストの転 置 通 信 を
隠 蔽 する。
上 記 の通 信 オーバーラップを実 装 する手 法 として「京 」では p8 に示 す通 信 マスク手 法 を開 発 し
ている。この手 法 では OpenMP の MASTER 構 文 によってマスタースレッドを通 信 スレッドとして使
用 し、残 りのスレッドに演 算 処 理 を動 的 に割 り当 てる。この実 装 によって、通 信 処 理 の完 了 後 に
マスタースレッドも演 算 に復 帰 させ、スレッド間 の負 荷 分 散 を最 適 化 することが可 能 となる。この手
法 は n スレッドを用 いて通 信 処 理 のオーバーヘッドを 1/n に削 減 できるため、今 後 のメニーコア環
境 において非 常 に有 望 な技 術 である。また、通 信 マスク手 法 は標 準 的 な MPI と OpenMP の機 能
のみで実 装 可 能 であり、非 同 期 1 対 1 通 信 のみならず、同 期 通 信 や集 団 通 信 も処 理 できるため、
極 めて汎 用 性 が高 い。
一 方 、p9 に示 すように、FX100 ではアシスタントコアを用 いる新 たな通 信 オーバーラップが利 用
可 能 である。この機 能 を用 いると、ソースコードの書 き換 えなしに、オーバーラップ区 間 をディレク
ティブで指 定 することによって、対 象 とする演 算 処 理 の背 後 で p10 に示 す MPI-3.0 の非 同 期 通
信 処 理 をアシスタントコアで同 時 実 行 することができる。以 下 では GT5D カーネルの境 界 データ
通 信 と GKV カーネルの転 置 通 信 を対 象 にこの機 能 の有 効 性 を検 証 する。
2.8.3.1 GT5D カーネルにおける境 界 データ通 信 のオーバーラップ
まず、GT5D カーネルを用 いて通 信 オーバーラップの効 果 を調 べた。このカーネルは境 界 デー
タ通 信 を含 む xyzv 方 向 の 4 次 元 差 分 演 算 を行 うが、領 域 分 割 は xy 方 向 の 2 次 元 方 向 のみと
なっている。このため、差 分 演 算 のループを zv 差 分 演 算 と xy 差 分 演 算 に分 離 し、zv 差 分 演 算
の背 後 で境 界 データ通 信 を実 行 し、その後 で xy 差 分 演 算 を実 行 する。通 信 処 理 は p12 に示 す
5 パターンの実 装 を用 意 した。
•
original 版 :MPI_Isend/Rrecv/Waitall を連 続 して実 行 し、通 信 の同 期 をとってから差
分 演 算 を実 行 。
•
overlap 版 :マスタースレッドのみが MPI_Isend/Rrecv/Waitall を実 行 し、他 は演 算 処
理 を実 行 。
147 / 253
•
unroll 版 :32 スレッドの FX100 で十 分 なループ長 を確 保 するために外 側 2 重 ループ
を 1 重化。
•
unroll+overlap 版 :unroll 版 でオーバーラップを実 装 し、演 算 負 荷 バランスを改 善 。
•
通 信 スレッド解 除 版 :unroll+overlap 版 において MASTER 構 文 を削 除 し、MPI_Isend
/Recv、および、MPI_Waitall をそれぞれ演 算 処 理 の前 後 に発 行 。さらに、スレッドスケ
ジューリングを DYNAMIC から STATIC に変 更 。
FX100 における性 能 測 定 結 果 を p13 に示 す。ここで、処 理 時 間 はマスタースレッドで計 測 した
境 界 データコピー(copy 区 間 )、xy 差 分 演 算 (kernel 区 間 )、通 信 処 理 (waitall 区 間 )、および、
zv 差 分 演 算 (kernel_p 区 間 )の内 訳 を示 す。マスタースレッドを通 信 スレッドとして使 用 する over
lap 版 、および、unroll+overlap 版 では zv 差 分 演 算 と通 信 処 理 の同 時 実 行 により kernel_p 区 間
がマスタースレッド上 で縮 小 する。一 方 、アシスタントコアを用 いる通 信 スレッド解 除 版 (通 信 促 進
あり)では通 信 処 理 の大 部 分 がマスタースレッドからアシスタントコアに移 行 するため、waitall 区
間 が縮 小 する。overlap 版 では 16 スレッド(1CMG)に対 し、OpenMP を適 用 している最 外 の x 方
向 のループ長 が 32 となるのに対 し、unroll+overlap 版 では xy 方 向 のループ長 が 1024 となり、ス
レッド間 の動 的 負 荷 分 散 のバランスが改 善 する。通 信 スレッド解 除 版 では、アシスタントコアを用
いない場 合 には unroll 版 とほぼ同 じコスト分 布 となるが、アシスタントコアを用 いる通 信 促 進 を適
用 することにより、従 来 の通 信 マスク手 法 を上 回 る性 能 を達 成 した。p14 に示 す kernel_p 区 間 の
詳 細 プロファイラでは、unroll+overlap 版 ではマスタースレッドの演 算 数 はほぼゼロとなり、通 信 処
理 に専 有 されているが、通 信 スレッド解 除 版 (通 信 促 進 あり)では、マスタースレッドも含 めてほぼ
均 等 な演 算 量 となっていることがわかる。しかしながら、MPI 起 動 処 理 とアシスタントコアへの移 行
処 理 のオーバーヘッドが残 っており、静 的 スレッドスケジューリングを行 った場 合 には約 5%程 度
の遅 延 がマスタースレッドで発 生 している。このため、アシスタントコアを利 用 する場 合 でも動 的 ス
ケジューリングを用 いてスレッド間 の負 荷 分 散 を最 適 化 する必 要 があることに注 意 が必 要 である。
2.8.3.2 GKV カーネルにおける転 置 通 信 のオーバーラップ
次 に、GKV カーネルを用 いて通 信 オーバーラップの効 果 を調 べた。このカーネルは k x k y zvw
空 間 の 5 次 元 データに対 して k x k y 波 数 空 間 の 2 次 元 逆 フーリエ変 換 を実 行 し、擬 スペクトル法
によって xy 実 空 間 で非 線 形 項 を計 算 した後 で非 線 形 項 を再 び k x k y 波 数 空 間 に 2 次 元 順 フー
リエ変 換 する。この処 理 を w 方 向 にパイプライン化 し、w 方 向 のインデックスの異 なる転 置 通 信 と
FFT 処 理 、および、非 線 形 項 計 算 をオーバーラップする。通 信 処 理 は p16 に示 す 5 パターンの
実 装 を用 意 した。
•
オーバーラップなし MPI_Alltoall 版 :MPI_Alltoall を用 いる転 置 通 信 と FFT 処 理 を
逐 次 的 に実 行 するオリジナル版 。
•
オーバーラップあり MPI_Alltoall 版 :FFT 処 理 の背 後 でマスタースレッドが MPI_Allt
oall を用 いる転 置 通 信 を同 時 実 行 。
•
オーバーラップなし MPI_Ialltoall 版 :MPI-3.0 の非 同 期 集 団 通 信 MPI_Ialltoall を用
いる転 置 通 信 と FFT 処 理 を逐 次 的 に実 行 。
•
オーバーラップあり MPI_Ialltoall 版 :FFT 処 理 の背 後 でアシスタントコアが MPI_Iallt
oall を用 いる転 置 通 信 を同 時 実 行 。
•
オーバーラップあり MPI_Ialltoall、静 的 スレッドスケージュール版 :オーバーラップあり
MPI_Ialltoall 版 においてスレッドスケジューリングを DYNAMIC から STATIC に変 更 。
148 / 253
FX100 における性 能 測 定 結 果 を p17 に示 す。ここで、処 理 時 間 はマスタースレッドで計 測 した
逆 フーリエ変 換 用 の転 置 通 信 (Comm.(bwd))、FFT(Comp.(bwd))、順 フーリエ変 換 用 の転 置
通 信 (Comm.(fwd))、FFT(Comp.(fwd))、および、非 線 形 項 処 理 等 (Others)の内 訳 を示 す。マ
スタースレッドを通 信 スレッドとして使 用 するオーバーラップあり MPI_Alltoall 版 ではマスタースレ
ッドが転 置 通 信 を実 行 するため FFT の処 理 コストが縮 小 する。一 方 、アシスタントコアを用 いるオ
ーバーラップあり MPI_Ialltoall 版 では通 信 コストの一 部 がマスタースレッドからアシスタントコアに
移 行 しマスタースレッドから見 えなくなる。測 定 結 果 では通 信 マスク手 法 が最 も良 い性 能 を示 して
いるが、非 同 期 集 団 通 信 とアシスタントコアの利 用 でも同 程 度 の性 能 向 上 が確 認 できた。アシス
タントコア利 用 によるスレッド間 の負 荷 分 散 の均 等 化 を期 待 して、オーバーヘッドの少 ない静 的 ス
レッドスケジューリングを適 用 した結 果 、性 能 が低 下 した。また、オーバーラップあり版 では、スレッ
ド同 期 の回 数 が減 少 するため、スレッド間 の負 荷 バランスが改 善 し、Others 区 間 のコストが減 少 し
ている。
より詳 細 なコスト分 析 を p18 に示 す。通 信 コストを比 較 した結 果 、オーバーラップあり/なし、MPI
_Alltoall/MPI_Ialltoall、全 ての組 み合 わせでほぼ同 等 の通 信 コストとなることがわかった。インタ
ーコネクトのバンド幅 とメモリバンド幅 は一 桁 以 上 異 なることから、通 信 オーバーラップ適 用 時 の演
算 処 理 による通 信 性 能 への影 響 は限 定 的 である。また、MPI_Ialltoall では Tofu 向 け高 速 アル
ゴリズムが利 用 できないが、今 回 テストを行 った小 規 模 ノード数 では性 能 劣 化 は少 ないことがわか
った。MPI-3.0 の MPI_Ialltoall は非 同 期 集 団 通 信 であるが、MPI_Isend/Irecv と同 様 にアシスタ
ントコアを用 いないと非 同 期 に動 作 しないことに注 意 が必 要 である 。アシス タン トコアを用 いる場
合 には通 信 コストが約 3/1 に減 少 するが、MPI_Ialltoall の起 動 とアシスタントコアへの処 理 移 行
のオーバーヘッドがかなり残 っている。
スレッド間 の負 荷 バランスを p11 に示 す。オーバーラップなしの場 合 にはマスタースレッドの通
信 処 理 の間 、残 りのスレッドにかなり大 きいバリア同 期 待 ちのコストが見 られる。オーバーラップあ
りの場 合 にはスレッド間 の負 荷 分 散 が改 善 し、バリア同 期 待 ちのコストが大 幅 に減 少 する。しかし
ながら、アシスタントコアを利 用 して静 的 スレッドスケジューリングを適 用 すると、MPI_Ialltoall 起
動 とアシスタントコアへの移 行 処 理 のオーバーヘッドによってスレッド間 の負 荷 バランスが崩 れて
再 びバリア同 期 待 ちのコストが顕 在 化 する。このため、動 的 スレッドスケジューリングによって負 荷
分 散 を均 等 化 する実 装 が最 も良 い性 能 となった。アシスタントコアの利 用 によって比 較 的 簡 易 に
通 信 オーバーラップを実 現 できることを集 団 通 信 についても示 したが、大 規 模 問 題 で Tofu 専 用
アルゴリズムの利 用 が必 須 となる場 合 には従 来 の通 信 マスク手 法 の利 用 が推 奨 される。
2.8.4 GT5D カーネルにおける演 算 処 理 の性 能 測 定
FX100 で強 化 されたキャッシュ機 構 等 、演 算 機 能 を評 価 するために GT5D カーネルの逐 次 処
理 性 能 を「京 」と FX100 で比 較 した。p21 に示 す GT5D カーネルは xyzv 方 向 の 4 次 元 移 流 項
を 4 次 精 度 中 心 差 分 によって評 価 する 17 ステンシルの計 算 となっている(ここでは、逐 次 処 理 性
能 を比 較 するため、通 信 オーバーラップの際 に適 用 した zv 差 分 演 算 と xy 差 分 演 算 の分 割 は適
用 していない)。ソースコードにおいて浮 動 小 数 点 演 算 数 は 35Flop となるのに対 し、メモリアクセ
ス数 は 32B となる。ここで、l-2~l+2、k-2~k+2、j-2~j+2 の範 囲 はコアあたりのキャッシュサイズ以 下
となるため、オンキャッシュとして取 り扱 う。i-2~i+2 についてはメモリアクセスとなるが、動 的 スケジ
ューリングを適 用 する場 合 には隣 接 スレッドがロードしたデータを共 有 キャッシュ上 で再 利 用 でき
るため、やはりオンキャッシュとして取 り扱 う。この結 果 、メモリアクセスは f(l,k,j,i)、fc(l,k,j,i)のロー
149 / 253
ド、および、df(l,k,j,i)のロード・ストアで合 計 4 となり、演 算 密 度 は Flop/Byte~1.1 となる。この演 算
密 度 からルーフラインモデルによって見 積 もった演 算 性 能 の対 ピーク性 能 比 は「京 」、および、FX
100 でそれぞれ 28.4%、および、25.1%となるが、実 測 した演 算 性 能 は約 半 分 となり、理 論 的 な予
測 を大 幅 に下 回 っている。プロファイラの数 値 を比 較 すると、「京 」では L1D ミス数 が大 きく L1D ミ
ス dm 率 (プリフェッチが効 かない実 質 的 な L1D ミスの比 率 )も高 い。一 方 、FX100 では L2 ミス d
m 率 (プリフェッチが効 かない実 質 的 な L2 ミスの比 率 )が高 く、FMA 命 令 率 (ここでは浮 動 小 数
点 命 令 数 に対 して定 義 )が「京 」よりかなり低 いことがわかった。ここで、非 FMA 命 令 では FMA 命
令 の半 分 の演 算 しか処 理 できないため、FMA 命 令 率 が低 いと処 理 性 能 が劣 化 する。
この状 況 をより詳 しく調 べるために、p22 ではさらにカーネルを簡 約 化 し、定 数 係 数 の 17 ステン
シル計 算 を行 った。この結 果 、「京 」ではルーフラインモデルによる対 ピーク性 能 比 の 8 割 以 上 の
演 算 性 能 を達 成 した。プロファイラの数 値 を見 ると、「京 」では L1D ミス数 が p24 の理 論 見 積 とほ
ぼ一 致 し、L1D ミス dm 率 、L2 ミス dm 率 も低 く、ほぼ理 想 的 なメモリアクセスが実 現 していること
がわかった。ここで、L1D ミス数 の理 論 評 価 は同 じキャッシュライン上 の l-2~l+2、および、プリフェ
ッチされる 3 キャッシュライン上 の k-1~k+1 までを含 む 7 要 素 をオン L1 キャッシュとして扱 い、残 り
の 10 要 素 にループ回 転 数 をかけてキャッシュラインサイズで割 った値 によって定 義 している。また、
ソースコードは典 型 的 な積 和 処 理 のパターンになっており、FMA 命 令 率 も 9 割 以 上 という理 想 的
な性 能 となっていた。一 方 、FX100 ではキャッシュラインサイズが 128B から 256B に拡 張 されたこ
とに伴 い L1D ミス数 が半 減 し、L1 キャッシュについてはほぼ理 想 的 な性 能 が得 られているが、L2
ミス dm 率 が高 くプリフェッチの効 率 が低 い、また、FMA 命 令 率 が低 いという問 題 が明 らかになっ
た。
次 に、p23 では係 数 を定 数 から配 列 に変 更 し、17 ストリーム版 に近 い形 に修 正 した。この結 果 、
「京 」では L1D ミス数 、および、L1D ミス dm 率 が増 大 し、演 算 性 能 がルーフラインモデルによる理
論 的 な予 測 から大 幅 に劣 化 することが確 認 された。L1 キャッシュが 2way の「京 」ではループ内 の
配 列 数 の増 大 に伴 って、L1 キャッシュ競 合 が頻 発 する。この問 題 の回 避 策 としては、通 信 オー
バーラップで適 用 したようなループ分 割 によってループ内 の配 列 数 を調 整 することが有 効 である。
一 方 、FX100 では L1 キャッシュが 4way に増 え、キャッシュラインサイズも 256B に拡 張 されてい
るため、「京 」で顕 在 化 したような L1 キャッシュ競 合 は見 られず L1D ミス数 は変 化 しなかった。た
だし、L1D ミス dm 率 が増 大 しており、プリフェッチの効 率 が劣 化 していることがわかった。
以 上 の性 能 測 定 結 果 から、FX100 では「京 」の弱 点 であった L1 キャッシュの問 題 が解 消 して
いるが、FMA 命 令 率 とプリフェッチ効 率 の低 下 という新 たな問 題 が発 生 していることがわかった。
この 2 つの問 題 の原 因 調 査 を行 ったが、本 報 告 書 の執 筆 時 点 でプリフェッチ効 率 低 下 の問 題 は
未 解 決 であったため、以 下 では FMA 命 令 率 の問 題 について調 査 結 果 をまとめる。
2.8.4.1 FX100 における FMA 命 令 率 低 下
FMA 命 令 率 低 下 の原 因 調 査 にあたり、コンパイラの動 作 を解 析 した結 果 、ループボディの演
算 特 性 に応 じてコンパイラが以 下 の 2 つの最 適 化 アルゴリズムから最 適 と判 断 されるものを選 択
していることがわかった。p26 の FMA 促 進 アルゴリズムでは積 和 型 の多 項 式 演 算 を FMA 命 令 の
繰 り返 しによって深 い木 構 造 で表 現 するのに対 し、p27 の並 列 化 促 進 アルゴリズムでは同 じ演 算
を非 FMA 命 令 が多 い浅 い木 構 造 で表 現 する。前 者 は FMA 命 令 率 が高 い最 適 化 であるが、命
令 の並 列 度 が低 くソフトウェアパイプライニングが有 効 化 できるル ープに対 して高 い性 能 を発 揮
する。一 方 、後 者 は FMA 命 令 率 が低 いが、命 令 の並 列 度 が高 く、ソフトウェアパイプライニング
150 / 253
がそれほど効 かない場 合 でも、命 令 スケジューリングを最 適 化 できる。通 常 はコンパイラが自 動 的
にどちらの最 適 化 を採 用 するか選 択 するが、今 回 は強 制 的 に 2 つの最 適 化 アルゴリズムを適 用
し、p28 に示 すループボディのサイズが異 なる 5 つのプログラムの処 理 性 能 を比 較 した。
p.29 に 9 ステンシルのコード C の処 理 性 能 を示 す。このプログラムに対 してコンパイラは並 列 化
促 進 アルゴリズムを選 択 するため、オリジナルの場 合 には FMA 命 令 率 (ここではロード・ストア、整
数 演 算 等 を含 む全 命 令 数 に対 して定 義 )が低 くなる。これに FMA 促 進 アルゴリズムを適 用 すると
FMA 命 令 率 は FX10 とほぼ同 じ値 に向 上 するが、処 理 速 度 は低 下 する。ここで、FMA 促 進 アル
ゴリズムを適 用 した場 合 には SIMD 幅 が 128bit の FX10 に比 べて SIMD 幅 が 256bit の FX100
では総 命 令 数 がほぼ半 分 になる。p30 に 5 つのプログラムに対 する最 適 化 アルゴリズムの比 較 を
示 すが、ループボディが小 さい場 合 には並 列 化 促 進 アルゴリズムが有 効 であるが、ループボディ
が大 きくなるにつれて FMA 促 進 アルゴリズムの性 能 が逆 転 する傾 向 にあることがわかった。p22
の簡 約 化 カーネルに相 当 するコード D の場 合 には、コンパイラは並 列 化 促 進 アルゴリズムを選 択
していたが、この調 査 結 果 から FMA 促 進 アルゴリズムの方 が高 い処 理 性 能 を示 すことがわかっ
た。
2.8.5 まとめ
核融合プラズマ流体解析コード GT5D、および、GKV の主要計算カーネルを対象として FX100 の新機
能の有効性を検証した。アシスタントコアを利用した通信オーバーラップでは 1 対 1 通信、および、集
団通信の両方に対して従来の通信マスク手法と同程度の処理性能が得られたが、MPI を起動してアシス
タントコアに処理を移行するまでのオーバーヘッドが無視できないため、通信マスク手法と同様の動的
スケジューリングによるスレッド間の負荷分散の最適化が必要である。演算性能に関しては、L1 キャッ
シュの機能強化によって「京」の弱点であった L1 キャッシュ競合が改善しているが、
「京」に比べて F
MA 命令率やプリフェッチ効率が低下するという新たな問題点が明らかになった。これらの問題は今後
のコンパイラ改善によって解消されるものと期待する。
151 / 253
ŒĆóûąöåăĐUœÆ
nŸ,ăďôć|ïĖü
ÏáÝ
ÜUœ}@
`g)<"Œ“¶ˆtr
Vh{?É;Y
Éew
/+G9=
!H
B7¯mMŽ
-´:É'
ïĖüÜq¡
152 / 253
ƒÂ6ŎśĽœÎę¶0¡Ï·ŗńŝ
 
ŎśĽœ
Yę¯Ţosw°`
 
EĪĢĨŒĭĿšw°`
∂f
= G[f ] + C[f ]
∂t
∂f
∂f
− U2 [φ]
G[f ] = −U1 [φ] ·
œä,ĤEĘĥĨ¯
∂R
∂v
2
∂
∂
· (D1 f ) +
: (D2 f )
C[f ] = −
ĵţşšÄ´+‚
∂v
∂v∂v
−∇⊥ · (P1 ∇⊥ φ) + P2 (φ − φ) = ρ[f ]
KB¨ŗńŝŤ#ÿ#X
Vm¨ŗńŝŤÿ!X
ť
$ ť
"
nŸ,ăďôć|ïĖüÂÄÀÁÜq¡
 
 
 
 
Gyrokinetic Toroidal 5D Eulerian code
>ûĖďóµÛÏÎØ5uòČ
æē±%©ċúđÛáãnŸ,T
ăďôćܖ)„|¤—ñĈčĒ
ĖñĎĔä ÎÉ|­®Uä¦
¤—Xz
MPI+OpenMPÿæĂĐøü ċúđ
5u‹”·Ü|ĕZ\ÈIz
a·’È(¹ŠđĔîĕëøöz
ėéĖýđÈPvIz+¯ºžĘ
¤—¢sėITER¢sĘ
610x128x610x96x20 ~ 1000o<
~105óùøă
ș4‰þĖüa·/ñĎøû
*›^‚
5u‹”·ė°L2uĘÜ[%˜<J
v⊥
v//
z
Idomura et al., Comput.Phys.Commun.2008
Idomura et al., Nucl. Fusion 2009
Idomura et al., Int. J. HPC Appl. 2014
Idomura-Nakata, Phys. Plasmas 2014
Idomura, Phys. Plasmas 2014
y
v⊥
v//
x
GT5DïĖüÜóûēĔìóíĖĐĔì
589,824cores
K (2013)
65,536cores
Helios (2012)
16,384cores
BX900 (2011)
(NR,Nζ,NZ,Nv//,Nμ)=(768,64,768,128,32)
4
153 / 253
nŸ,ăďôć|ïĖüÂÃÅÜq¡
 
 
 
 
GyroKinetic Vlasov code
"šÛy×ÖFW¾5ÛÏÎØ5u
òČæē±%©ċúđÛáãnŸ,
Tăďôćܖ)„|¤—ä
ÎÉ|­®Uä¦Õã
¤—Xz
MPI+OpenMPÿæĂĐøü ċúđ
5u‹”·Ü|ĕZ\
Èóąëûđz(x,y)ÉIz(z,v,w)
a·’ÈđĔîĕëøöz
ėéĖýđÈ2uFFT+¯ºžĘ
¤—¢s
1024x1024x96x96x32x2 ~ 6000o<
~105óùøă
ș4‰þĖüa·/ñĎøû
*›^‚
GKVÛáãćđ÷óíĖđ¼<|¤—
SŠóíĖđ
¼<¬²(Q0.1mm
æèĔ¬²(Q5mm
→503Ü£L
GKVïĖüÜóûēĔìóíĖĐĔì
Watanabe-Sugama, Nucl. Fusion 2006
Watanabe et al., Phys. Rev. Lett. 2008
Maeyama et al., Parallel Computing 2015
Maeyama et al., Phys. Rev. Lett. 2015
5
¯Ú~—ÜèĖĀĖďøă
154 / 253
áĕ—·ę7y¡ĘĥĨıţŊţŏŃņ&•
áńţŀĕžµė—·¡Ě0¡¨Ę7y¡Ć4¿
õB (ČĐX —·ę
 
F¥ńţŀĪü1›ĎĨ—·
ĕý1›Čė×·Ę ð
 
—·¡ýę¾dĔF¥
ńţŀęTáĪQÃ
 
eęnŽ
!-Šę
  ńţŀÙ¼ÿĪēw
8Ę (
  w8ʦĨįšńŃĵļę
ńţŀÙ¼ĕĪ7y¡
 
vČĂnŽ
ťF¥ńţŀá
ťF¥ńţŀáĕ
hõBę7y¡
eęnŽ
vČĂnŽ
ťńţŀÙ¼¡
ťw8ʞµėńţŀ
Ù¼ĕĪ7y¡
ťX
ť;ÜõBęX
Ï·
Ï·
ťŠ
ťw8Ę7‡ę¡
áĕ—·ę7y¡ĪQ ĎĨáœļĵnŽ
 
ĔáļŞŃņĪQÇČÿNìęšĂáĕ—·Ī7y¡
  2T2áŤ7|áÿñ7|áť
  X
Ï·ęÆõBáŤ6ÿ
ť
  ïAá
  JŠ!-Ť
ť
  ńţŀÙ¼¡Ť6ť
',&! 8,
',&! 2345+
2345+
#
"!
*
áĸļŅĪ2,Ę&•)
á
ĸţńĮšĶęįŖţĻ
)0
)0
%#
)0
)0-.
%#
)0
*
7
155 / 253
䜰䝅䝇䝍䞁䝖䝁䜰䛻䜘䜛㏻ಙ䜸䞊䝞䝷䝑䝥ಁ㐍
„ 䜰䝅䝇䝍䞁䝖䝁䜰䛻㏻ಙฎ⌮䜢௵䛫䜛
䜛
౑⏝᫬䛾ືస䜲䝯䞊䝆
„ MPI䝷䜲䝤䝷䝸䛻ືస䝰䞊䝗䜢㏣ຍ
a. progress thread䛺䛧 (䝕䝣䜷䝹䝖)
b. progress thread䛒䜚
i.
ii.
iii.
⮬ື༊㛫䝰䞊䝗
ᣦᐃ༊㛫MPI࿧䜃ฟ䛧䛺䛧䝰䞊䝗
ᣦᐃ༊㛫MPI࿧䜃ฟ䛧䛒䜚䝰䞊䝗
„ ືసᴫせ:
䜰䝅䝇䝍䞁䝖䝁䜰䛜䝜䞁䝤䝻䝑䜻䞁䜾㏻ಙฎ⌮䛾኱༙䜢ᐇ⾜
ᑐ㇟༊㛫䜢᫂♧䛩䜛ሙྜ
„ ฼⏝⪅䛾ᑐฎ
1. MCA䝟䝷䝯䞊䝍䛷progress thread᭷↓䜢㑅ᢥ
2. ᚲせ䛻ᛂ䛨䛶䚸䜸䞊䝞䝷䝑䝥㏻ಙ䛾ᑐ㇟༊㛫䜢ᣦᐃ
•
•
FJMPI_Progress_start: 㠀ྠᮇ㏻ಙ䛾ಁ㐍ฎ⌮䜢㛤ጞ
FJMPI_Progress_stop: 㠀ྠᮇ㏻ಙ䛾ಁ㐍ฎ⌮䜢೵Ṇ
叏吁
ಁ呎
㐍 吧
ᑐ呀
吚
㇟ 吮
༊
㏻
㛫ಙ
᤼௚ไᚚ䜸䞊䝞
䝦䝑䝗䜢๐ῶ
„ 䝯䝸䝑䝖: 䝁䞊䝗᭩䛝᥮䛘䛺䛧䛻䜸䞊䝞䝷䝑䝥㏻ಙ䛜ྍ⬟䚸
⡆᫆䛺༊㛫ᣦᐃ䛷᤼௚ไᚚ䜸䞊䝞䝦䝑䝗䜒ᢚไ䛷䛝䜛
3
Copyright 2014 FUJITSU LIMITED
MPI-3.0䛾䝜䞁䝤䝻䝑䜻䞁䜾㞟ᅋ㏻ಙAPI (ᢤ⢋)
„ 1ᑐከ㏻ಙ
„ MPI_IBCAST(buffer, count, datatype, root, comm, request)
„ MPI_ISCATTER(sendbuf, sendcount, sendtype, recvbuf, recvcount,
recvtype, root, comm, request)
„ ከᑐ1㏻ಙ
„ MPI_IGATHER(sendbuf, sendcount, sendtype, recvbuf, recvcount,
recvtype, root, comm, request)
„ ከᑐከ㏻ಙ
„ MPI_IALLGATHER(sendbuf, sendcount, sendtype, recvbuf, recvcount,
recvtype, comm, request)
„ MPI_IALLTOALL(sendbuf, sendcount, sendtype, recvbuf, recvcount,
recvtype, comm, request)
„ 䝸䝎䜽䝅䝵䞁
„ MPI_IREDUCE(sendbuf, recvbuf, count, datatype, op, root, comm,
request)
„ MPI_IALLREDUCE(sendbuf, recvbuf, count, datatype, op, comm,
request)
„ 䝞䝸䜰ྠᮇ
„ MPI_IBARRIER(comm, request)
6
156 / 253
Copyright 2015 FUJITSU LIMITED
éĖýđÛÏÓã
6‡úĖö¯ÜèĖĀĖďøă
㏻ಙ䜸䞊䝞䝷䝑䝥ຠᯝ䛾ホ౯(1/3)
unroll+overlap∧䛾䝁䞊䝗䜲䝯䞊䝆
„ ホ౯᮲௳
„ ᐃ⎔ቃ
• FX100 32䝜䞊䝗 (1.975GHz䚸32.4Tflops)
• FX10 64䝜䞊䝗 (1.848GHz䚸15.1Tflops)
„ ᐃ᮲௳
• ၥ㢟䝃䜲䝈:
nnx㽢nny㽢nnz㽢nnv䠙256㽢256㽢64㽢128
• ୪ิᩘ:
npx㽢npy䠙8㽢8 (16䝇䝺䝑䝗㽢64䝥䝻䝉䝇)
„ ౑⏝䝞䜲䝘䝸
!$OMP PARALLEL
!$OMP MASTER
MPI_Isend
㏻ಙ䝇䝺䝑䝗ゎ㝖∧䛷䛿
ศ㞳䛧䚸₇⟬ฎ⌮ᚋ䛻⛣ື
MPI_Irecv
MPI_Waitall
!$OMP END MASTER
!$OMP DO SCHEDULE(DYNAMIC)
do ij=…
₇⟬ฎ⌮
enddo
!$OMP END PARALLEL
• original∧: MPI_Isend/Irecv/Waitall䜢㐃⥆䛧䛶ᐇ⾜
• overlap∧: 䝬䝇䝍䝇䝺䝑䝗䛜MPI_Isend/Irecv/Wait䜢ᐇ⾜䛧䚸௚䛿₇⟬ฎ⌮䜢ᢸᙜ
• unroll∧: ㏻ಙ┤ᚋ䛾₇⟬ฎ⌮(kernel_p༊㛫)䛷እഃ2㔜䝹䞊䝥䜢୍㔜໬
• unroll+overlap∧: overlap∧䛸unroll∧䜢⼥ྜ䛥䛫䚸₇⟬㈇Ⲵ୙ᆒ⾮䜢ᨵၿ
• ㏻ಙ䝇䝺䝑䝗ゎ㝖∧: unroll+overlap∧䜢䜒䛸䛻䚸MPI_Waitall䜢₇⟬ฎ⌮ᚋ䛻⛣ື
„ 䛭䛾௚
• FX100䛾䜸䞊䝞䝷䝑䝥ಁ㐍䛿⮬ື༊㛫䝰䞊䝗䜢౑⏝
(--mca opal_progress_thread_mode 3)
5
157 / 253
Copyright 2015 FUJITSU LIMITED
㏻ಙ䜸䞊䝞䝷䝑䝥ຠᯝ䛾ホ౯(2/3)
„ ㏻ಙ䝇䝺䝑䝗ᑐ䜰䝅䝇䝍䞁䝖䝁䜰䛾ຠᯝẚ㍑
䐟
䝬䝇䝍䝇䝺䝑䝗䛾ᐇ⾜᫬㛫 䝭䝸⛊
䐠
༊㛫
༊㛫
༊㛫
㏻ಙ䝇䝺䝑䝗ゎ㝖∧
㏻ಙಁ㐍䛒䜚
㏻ಙ䝇䝺䝑䝗ゎ㝖∧
∧
∧
∧
∧
䛭䛾௚
༊㛫
ὀ) ㏻ಙ䝇䝺䝑䝗ゎ㝖∧䛾
kernel_p༊㛫᫬㛫䛿
unroll∧䛛䜙䛾᥎ᐃ䛻䜘䜛
„ 䜰䝅䝇䝍䞁䝖䝁䜰䛾䜸䞊䝞䝷䝑䝥ಁ㐍ຠᯝ䛿䚸㏻ಙ䝇䝺䝑䝗᪉ᘧ䛸ྠ➼௨ୖ䐟
䐟
„ ㏻ಙ䝇䝺䝑䝗ゎ㝖∧䛿䚸䜰䝅䝇䝍䞁䝖䝁䜰䛻䜘䜛㏻ಙಁ㐍䛷14%ᛶ⬟ྥୖ䐠
6
Copyright 2015 FUJITSU LIMITED
㏻ಙ䜸䞊䝞䝷䝑䝥ຠᯝ䛾ホ౯(3/3)
„ 䝃䜲䜽䝹䜰䜹䜴䞁䝔䜱䞁䜾⤖ᯝ䛾ẚ㍑(kernel_p༊㛫)
„ unroll+overlap∧
⛊
䢎䢏䢔䡡䡳䡨䡫䡸䡩䢇䢚䡸䢚䡬ᚅ䛱
ᩚᩘ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
䝇䝖䜰ᚅ䛱
ᩚᩘ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᩚᩘ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᩚᩘ₇⟬ᚅ䛱
ᾋືᑠᩘⅬ₇⟬ᚅ䛱
ศᒱ࿨௧ᚅ䛱
࿨௧䝣䜵䝑䝏ᚅ䛱
䝞䝸䜰ྠᮇᚅ䛱
䛭䛾௚䛾ᚅ䛱
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
䝡䝆䞊᫬㛫
䝡䝆䞊᫬㛫
䝯䝰䝸䝡䝆䞊᫬㛫
• 䝬䝇䝍䝇䝺䝑䝗䛾₇⟬ᩘ䛿䜋䜌䝊䝻
э䝬䝇䝍䝇䝺䝑䝗䛿㏻ಙฎ⌮䛻ᑓᛕ
„ ㏻ಙ䝇䝺䝑䝗ゎ㝖∧ͤ
䢎䢏䢔䡡䡳䡨䡫䡸䡩䢇䢚䡸䢚䡬ᚅ䛱
⛊
ᩚᩘ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᩚᩘ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᩚᩘ₇⟬ᚅ䛱
ᾋືᑠᩘⅬ₇⟬ᚅ䛱
ศᒱ࿨௧ᚅ䛱
࿨௧䝣䜵䝑䝏ᚅ䛱
䝞䝸䜰ྠᮇᚅ䛱
ᩚᩘ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
䛭䛾௚䛾ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
࿨௧䝁䝭䝑䝖
䝇䝖䜰ᚅ䛱
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
䝡䝆䞊᫬㛫
䝡䝆䞊᫬㛫
䝯䝰䝸䝡䝆䞊᫬㛫
• ඲䝇䝺䝑䝗䛷₇⟬ᩘ䛿ྠ➼
• 䝬䝇䝍䝇䝺䝑䝗䛿㏻ಙฎ⌮䜒ᐇ⾜
ͤ䛯䛰䛧kernel_p༊㛫䛾䝇䝺䝑䝗୪ิ䝹䞊䝥䛿
㟼ⓗ䝇䜿䝆䝳䞊䝸䞁䜾
„ ㏻ಙ䝇䝺䝑䝗ゎ㝖∧ͤ(㏻ಙಁ㐍䛒䜚)
• ඲䝇䝺䝑䝗䛷₇⟬ᩘ䛿ྠ➼
⛊
䢎䢏䢔䡡䡳䡨䡫䡸䡩䢇䢚䡸䢚䡬ᚅ䛱
ᩚᩘ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
䝇䝖䜰ᚅ䛱
ᩚᩘ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᩚᩘ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᩚᩘ₇⟬ᚅ䛱
ᾋືᑠᩘⅬ₇⟬ᚅ䛱
ศᒱ࿨௧ᚅ䛱
࿨௧䝣䜵䝑䝏ᚅ䛱
䝞䝸䜰ྠᮇᚅ䛱
䛭䛾௚䛾ᚅ䛱
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
䝡䝆䞊᫬㛫
䝡䝆䞊᫬㛫
䝯䝰䝸䝡䝆䞊᫬㛫
• 䝬䝇䝍䝇䝺䝑䝗䛾㐜䜜䛿5%⛬ᗘ
䝇䝺䝑䝗ᩘ䛜2෢䚸ືⓗ䝇䜿䝆䝳䞊
䝸䞁䜾୙せ䚸䝹䞊䝥୍㔜໬䜒୙せ
7
158 / 253
Copyright 2015 FUJITSU LIMITED
éĖýđÛÏÓã
»4¯ÜUœ}@
GKV䜹䞊䝛䝹䛻䛚䛡䜛䜸䞊䝞䝷䝑䝥ຠᯝ (1/4)
„ ホ౯᮲௳
d. 䜸䞊䝞䝷䝑䝥䛒䜚 (MPI_Ialltoall)
䛾䝁䞊䝗䜲䝯䞊䝆
„ ᐃ⎔ቃ:
• FX100 16䝜䞊䝗 (2.2GHz䚸18.0Tflops)
„ ᐃ᮲௳
• ၥ㢟䝃䜲䝈: nxw㽢nyw䠙128㽢128䚸
global_nz㽢global_nv㽢global_nm
䠙16㽢16㽢15
• ୪ิᩘ: 16䝇䝺䝑䝗㽢32䝥䝻䝉䝇䚸
nprocw㽢nprocz㽢nprocv㽢nprocm㽢nprocs
䠙4㽢2㽢2㽢2㽢1
„ ౑⏝䝞䜲䝘䝸
!$OMP PARALLEL
do im = 2, nm-2
!$OMP MASTER
CALL MPI_Ialltoall
!$OMP END MASTER
!$OMP DO SCHEDULE(DYNAMIC)
do i = 1, num_trans
FFT₇⟬
enddo
!$OMP MASTER
CALL MPI_Waitall
!$OMP END MASTER
!$OMP BARRIER
enddo
!$OMP END PARALLEL
a. 䜸䞊䝞䝷䝑䝥䛺䛧 (MPI_Alltoall)
b. 䜸䞊䝞䝷䝑䝥䛒䜚
(MPI_Alltoall䠇OpenMP㏻ಙฎ⌮䝇䝺䝑䝗)
c. 䜸䞊䝞䝷䝑䝥䛺䛧 (MPI_Ialltoall)ͤ
d. 䜸䞊䝞䝷䝑䝥䛒䜚 (MPI_Ialltoall)ͤ
e. 䜸䞊䝞䝷䝑䝥䛒䜚 (MPI_Ialltoall䠇㟼ⓗ䝇䝺䝑䝗䝇䜿䝆䝳䞊䝹)ͤ
ͤ:ᐩኈ㏻ഃ䛷సᡂ
„ 䛭䛾௚
• 䜸䞊䝞䝷䝑䝥ಁ㐍䛿⮬ື༊㛫䝰䞊䝗䜢౑⏝ (--mca opal_progress_thread_mode 3)
8
159 / 253
Copyright 2015 FUJITSU LIMITED
GKV䜹䞊䝛䝹䛻䛚䛡䜛䜸䞊䝞䝷䝑䝥ຠᯝ (2/4)
„ ᐃ⤖ᯝ
&)
!"
&(
&'
䐟
&
䐡
䐠
%*
%)
%(
%'
%
! ! " ! " ! +
! " +" ! "
+
"
+
!"
!"
!"
!"
„ MPI_Alltoall䠇OpenMP㏻ಙฎ⌮䝇䝺䝑䝗䛷䛿䚸35.4%䛾ᐇ⾜᫬㛫▷⦰䐟
䐟
„ MPI_Ialltoall䠇䜰䝅䝇䝍䞁䝖䝁䜰᭷ຠ໬䛷䛿䚸34.7%䛾ᐇ⾜᫬㛫▷⦰䐠
„ 䐠䛻ᑐ䛧㟼ⓗ䝇䝺䝑䝗䝇䜿䝆䝳䞊䝹䜢⾜䛖䛸䚸▷⦰ᖜ䛿26.5%䛻ῶᑡ䐡
9
Copyright 2015 FUJITSU LIMITED
GKV䜹䞊䝛䝹䛻䛚䛡䜛䜸䞊䝞䝷䝑䝥ຠᯝ (3/4)
„ ㏻ಙฎ⌮᫬㛫▷⦰䛚䜘䜃
䜸䞊䝞䝷䝑䝥ᗘྜ䛔䛾☜ㄆ
ྛ ᐃ䛾᫬㛫ෆヂ䜢୪䜉᭰䛘䛯⤖ᯝ
&)
!"
&(
„ 䜰䝅䝇䝍䞁䝖䝁䜰↓ຠ᫬䖩
䖩䛿
MPI_Alltoall䛸MPI_Ialltoall䛜
䜋䜌ྠ䛨ฎ⌮᫬㛫
&'
&
%*
%)
65%⛬ᗘ
%(
%'
• ᚋ⪅䛿Tofuྥ䛡䜰䝹䝂䝸䝈䝮䛷䛺䛔䛜䚸
䝜䞊䝗ᩘ䛜ᑡ䛺䛔䛯䜑ᙳ㡪ᑠ
%
! ! " ! " ! +
! " +" ! "
+
"
+
䖩
„ 䜰䝅䝇䝍䞁䝖䝁䜰䜢᭷ຠ䛻䛩䜛䛸䚸
MPI_Ialltoall䛿65%⛬ᗘ᫬㛫▷⦰
!"
䖩
!"
䖩
䖩
!"
!"
&)
!"
&(
„ 䐠MPI_Alltoall䠇OMP㏻ಙ䝇䝺䝑䝗䜔
䐡MPI_Ialltoall䠇䜰䝅䝇䝍䞁䝖䝁䜰䛷䛿䚸
bwd䠇fwd༊㛫䛾⤒㐣᫬㛫䛜
䐟䜸䞊䝞䝷䝑䝥䛺䛧᫬䛾₇⟬᫬㛫䛻
ᴫ䛽୍⮴
㏻ಙ᫬㛫䛾㞃䜊䛔䛻ᡂຌ
&'
&
%*
%)
%(
%'
%
! ! " ! " ! ! " +" ! "
+
+
"
+
䐟
!"
10
160 / 253
䐠
!"
䐡
!"
!"
Copyright 2015 FUJITSU LIMITED
GKV䜹䞊䝛䝹䛻䛚䛡䜛䜸䞊䝞䝷䝑䝥ຠᯝ (4/4)
„ 䝃䜲䜽䝹䜰䜹䜴䞁䝔䜱䞁䜾⤖ᯝ䛾ẚ㍑(bwd:comm.+comp.༊㛫)
䐟 䜸䞊䝞䝷䝑䝥䛺䛧 (MPI_Alltoall)
䐟
⛊
䢎䢏䢔䡡䡳䡨䡫䡸䡩䢇䢚䡸䢚䡬ᚅ䛱
ᩚᩘ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
䝇䝖䜰ᚅ䛱
ᩚᩘ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᩚᩘ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᩚᩘ₇⟬ᚅ䛱
ᾋືᑠᩘⅬ₇⟬ᚅ䛱
ศᒱ࿨௧ᚅ䛱
࿨௧䝣䜵䝑䝏ᚅ䛱
䝞䝸䜰ྠᮇᚅ䛱
䛭䛾௚䛾ᚅ䛱
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
䝡䝆䞊᫬㛫
䝡䝆䞊᫬㛫
䝯䝰䝸䝡䝆䞊᫬㛫
• 㠀䝬䝇䝍䝇䝺䝑䝗䛾䝞䝸䜰ྠᮇᚅ䛱኱
䐠 䜸䞊䝞䝷䝑䝥䛒䜚
(MPI_Alltoall䠇OMP㏻ಙ䝇䝺䝑䝗)
⛊
• 䝞䝸䜰ྠᮇᚅ䛱䜢䜋䜌ゎᾘ
䐠
䐡 䜸䞊䝞䝷䝑䝥䛒䜚 (MPI_Ialltoall)
䠇䜰䝅䝇䝍䞁䝖䝁䜰
• 䝞䝸䜰ྠᮇᚅ䛱䜢䜋䜌ゎᾘ
⛊
䐡
䐢 䜸䞊䝞䝷䝑䝥䛒䜚
(MPI_Ialltoall䠇㟼ⓗ䡹䢖䡫䢀䢚䡹䡵䡸䢚䡩䡬䢕)
䠇䜰䝅䝇䝍䞁䝖䝁䜰
⛊
• ྛ䝇䝺䝑䝗䛾₇⟬㔞䛜ྠ䛨
䐢
э㠀䝬䝇䝍䝇䝺䝑䝗䛻㏻ಙฎ⌮ᚅ䛱䛜Ⓨ⏕
⏕
௒ᅇ䜿䞊䝇䛿ືⓗ䝇䝺䝑䝗䝇䜿䝆䝳䞊䝹䛜᭷฼
11
Copyright 2015 FUJITSU LIMITED
éĖýđÛÏÓã
~—„ÜUœ}@
161 / 253
GT5DéĖýđ
~—]
35
ĊċĐåëõó]
32
K
…6
FX100-1CMG
đĖāďæĔ[%]
28.4 25.1
đĖāďæĔ[msec]
2.01
0.58
~—Uœ[%]
14.0
13.4
A a·[msec]
4.39
1.17
ĊċĐĀĔüK [GB/s]
L1DĈó]
23.4
89.3
2.73e6
1.04e6
L1DĈódmƒ[%]
43.4
24.8
6.44e5
3.14e5
8.9
37.4
SIMD1ƒ[%]
99.7
99.8
’2SIMD~—/SIMD~—[%]
72.3
34.3
L2Ĉó]
L2Ĉódmƒ[%]
ÇSTREAM Benchmark: K~46.6GB/s, FX100~310GB/s
ÇCompiler option
K:
-Kfast -Kparallel,openmp -X9 -Kmfunc=2 -Kocl -CcdRR8
FX100:
 
real*8 f(-1:nv+2,-1:nz+2,-1:ny+2,-1:nx+2)
!$OMP DO SCHEDULE(dynamic)
do i = 1,nx (nx=32)
do j = 1,ny (ny=32)
compute vxyv~vxl2 from vx(l,j,i),vy(l,j,i),vz(l,j,i),vv(l,j,i)
do k = 1,nz (nz=16)
do l = 1,nv (nv=128)
LOAD
df(l,k,j,i)=
LOAD/STORE
&
vxyv(l)*f(l,k,j,i)
&
+ vvr(l) *f(l+1,k,j,i)
&
- vvl(l) *f(l-1,k,j,i)
&
- vvr2(l)*f(l+2,k,j,i)
&
+ vvl2(l)*f(l-2,k,j,i)
&
+vzl2(l)*(f(l,k-2,j,i)-f(l,k+2,j,i))
&
+vzl(l) *(f(l,k+1,j,i)-f(l,k-1,j,i))
&
+ vyr(l) *f(l,k,j+1,i)
&
- vyl(l) *f(l,k,j-1,i)
&
- vyr2(l)*f(l,k,j+2,i)
&
+ vyl2(l)*f(l,k,j-2,i)
&
+ vxr(l) *f(l,k,j,i+1)
&
- vxl(l) *f(l,k,j,i-1)
&
- vxr2(l)*f(l,k,j,i+2)
&
+ vxl2(l)*f(l,k,j,i-2)
dfc=dfc+df(l,k,j,i)*fc(l,k,j,i)
enddo
enddo
enddo
enddo
-fw -Qt -Ntl_notrt
-xpre_diff -Kfast -Kopenmp -Kocl,optmsg=2 -X9
-Kmfunc=2 -Kloop_nofusion -CcdRR8
-Kprefetch_sequential=soft,prefetch_cache_level=1
đĖāďæĔÐâ9ÑÒUœ#&
ÈUœ#&Ü)3ä¨lÔÖÎ
21
¦¨,ĝŋIJņæŏOnn
‹¥n
33
ĿŀŅĖğĨĦn
24
”D
FX100-1CMG
33.3 29.7
ņŋķńĘʼn[msec]
1.62
0.46
‹¥b¯[%]
28.3
16.5
P²rÒ[msec]
1.91
0.83
ĿŀŅĴʼnİX [GB/s]
L1DĽĦn
L1DĽĦdm’[%]
L2ĽĦn
L2ĽĦdm’[%]
SIMD8’[%]
9SIMD‹¥/SIMD‹¥[%]
 
K
ņŋķńĘʼn[%]
38.9 1.41e6
87.6
7.35e5
18.8
6.6
4.17e5
1.87e5
4.0
34.2
100.0
100.0
93.9
37.5
āĆņŋķńĘʼnąŎ$ĂăĒą
ĄS÷éFX100āĆIXĄb¯(,
  L2ĽĦdm’ñÚóĸŅķĚĬīñíĉ
ó€¯÷Āìăìő
  FMA‹¥’ñóê.©ă 9ą
ĝŋIJņĕíĉó¸ÎāòĀìăìő
real*8 f(-1:nv+2,-1:nz+2,-1:ny+2,-1:nx+2)
!$OMP DO SCHEDULE(dynamic)
do i = 1,nx (nx=32)
do j = 1,ny (ny=32)
do k = 1,nz (nz=16)
do l = 1,nv (nv=128)
LOAD
df(l,k,j,i)= &
LOAD/STORE
&
f(l,k,j,i) *1.11d0
&
+f(l-2,k,j,i) *1.12d0
&
+f(l-1,k,j,i) *1.13d0
&
+f(l+1,k,j,i) *1.14d0
&
+f(l+2,k,j,i) *1.15d0
&
+f(l,k-2,j,i) *1.16d0
&
+f(l,k-1,j,i) *1.17d0
&
+f(l,k+1,j,i) *1.18d0
&
+f(l,k+2,j,i) *1.19d0
&
+f(l,k,j-2,i) *1.21d0
&
+f(l,k,j-1,i) *1.22d0
&
+f(l,k,j+1,i) *1.23d0
&
+f(l,k,j+2,i) *1.24d0
&
+f(l,k,j,i-2) *1.25d0
&
+f(l,k,j,i-1) *1.26d0
&
+f(l,k,j,i+1) *1.27d0
&
+f(l,k,j,i+2) *1.28d0
enddo
enddo
enddo
enddo
5
162 / 253
¦¨,ĝŋIJņçŏÍ
‹¥n
33
ĿŀŅĖğĨĦn
24
K
”D
FX100-1CMG
ņŋķńĘʼn[%]
33.3 29.7
ņŋķńĘʼn[msec]
1.62
0.46
‹¥b¯[%]
15.9
12.6
P²rÒ[msec]
3.40
1.09
ĿŀŅĴʼnİX [GB/s]
L1DĽĦn
L1DĽĦdm’[%]
L2ĽĦn
L2ĽĦdm’[%]
SIMD8’[%]
9SIMD‹¥/SIMD‹¥[%]
 
n
21.6
72.3
2.54e6
7.75e5
30.0
25.2
4.11e5
2.10e5
5.0
17.0
100.0
100.0
94.0
37.4
āčIXĄb¯(,
  L1DĽĦnédm’ĂčĄIXĄE'ê
  FX100āĆL1DĽĦnąEIƍìê
real*8 f(-1:nv+2,-1:nz+2,-1:ny+2,-1:nx+2)
!$OMP DO SCHEDULE(dynamic)
do i = 1,nx (nx=32)
do j = 1,ny (ny=32)
do k = 1,nz (nz=16)
do l = 1,nv (nv=128)
LOAD
df(l,k,j,i)= &
LOAD/STORE
&
vv_(l) *f(l,k,j,i)
&
+vvl2(l)*f(l-2,k,j,i)
&
-vvl(l) *f(l-1,k,j,i)
&
+vvr(l) *f(l+1,k,j,i)
&
-vvr2(l)*f(l+2,k,j,i)
&
+vzl2(l)*f(l,k-2,j,i)
&
-vzl(l) *f(l,k-1,j,i)
&
+vzr(l) *f(l,k+1,j,i)
&
-vzr2(l)*f(l,k+2,j,i)
&
+vyl2(l)*f(l,k,j-2,i)
&
-vyl(l) *f(l,k,j-1,i)
&
+vyr(l) *f(l,k,j+1,i)
&
-vyr2(l)*f(l,k,j+2,i)
&
+vxl2(l)*f(l,k,j,i-2)
&
-vxl(l) *f(l,k,j,i-1)
&
+vxr(l) *f(l,k,j,i+1)
&
-vxr2(l)*f(l,k,j,i+2)
enddo
enddo
enddo
enddo
Cf. L1DĽĦ“¿· K:
8B×10¶ª×(128×16×32×32)<À÷128B/$ńĘʼnŐ1.31e6
FX100:8B×10¶ª×(128×16×32×32)<À÷256B/$ńĘʼnŐ6.55e5
äl-2~l+2,k-1~k+1ĕĜʼnL1$ĂkO
6
ÛÏÓã
1Ć)3
163 / 253
ૼ୒ੲਾ „भ৲૗஄
„્ඉ
y৲૨ऋৈः
y୵ഥभధഔਙऋ଩ः‫ق‬౰઴ॶজ‫ش‬ऋৈः‫ك‬
yଂਚ৓ऩ୵ഥ५ॣ४গ‫ش‬জথॢभ஍ટൠ
y९ইॺक़ख़॔ঃॖউছॖথॽথॢऋથ஍ध
ਖ਼૵खञৃ়प৭උ
„૗஄୻
䠖࿨௧
7
Copyright 2016 FUJITSU LIMITED
ૼ୒ੲਾ „भధഔ৲૗஄
„્ඉ
y৲૨ऋ଩ः
y୵ഥभధഔਙऋৈः‫ق‬౰઴ॶজ‫ش‬ऋ଩ः‫ك‬
yଂਚ৓ऩ୵ഥ५ॣ४গ‫ش‬জথॢभ஍ટৈ
y९ইॺक़ख़॔ঃॖউছॖথॽথॢऋൠःध
ਖ਼૵खञৃ়प৭උ
„૗஄୻
䠖࿨௧
8
164 / 253
Copyright 2016 FUJITSU LIMITED
ৌ଴॥‫ ॻش‬
㏣ຍ
„ਫ਼઒॥‫ॻش‬
ड़জ४ॼঝ॥‫ॻش‬भঝ‫ش‬উ঎ॹॕभ१ॖ६॑૗৲
॥‫ ॻش‬
॥‫ ॻش‬
ࠥ
GI͐
ࠥ
ࠥ
͐
ࠥ
॥‫ ॻش‬
ࠥ
͐
ࠥ
॥‫ ॻش‬
॥‫ ॻش‬
ࠥ
͐
ࠥ
ࠥ
͐
ࠥ
3
Copyright 2016 FUJITSU LIMITED
৹ਪ੥ટ ኚ᭦
„॥‫ॻش‬ถ಍উটই॓ॖছ
⛊
ड़জ४ॼঝ
യਤ
ӖӗӜҩһҰҳӀұӏӢӀӢҴୄठ
ତਯট‫ॻش‬ওঔজ॔ॡ७५ୄठ
೟৿৵ਯਡট‫ॻش‬ওঔজ॔ॡ७५ୄठ
५ॺ॔ୄठ
ତਯট‫॔
ॻش‬ॡ७५ୄठ
ତਯӟҴӈӢҵҼӂӁୄठ
೟৿৵ਯਡট‫॔
ॻش‬ॡ७५ୄठ
೟৿৵ਯਡӟҴӈӢҵҼӂӁୄठ
ତਯ౰઴ୄठ
೟৿৵ਯਡ౰઴ୄठ
ীว୵ഥୄठ
୵ഥইख़ॵॳୄठ
ংজ॔৊਋ୄठ
जभ౎भୄठ
୵ഥ॥঑ॵॺ
୵ഥ॥঑ॵॺ
୵ഥ॥঑ॵॺ
౰઴
আ‫ش‬ॡૻ
୵ഥ૨
୵ഥ૨
ӖӗӜӁӝҴӐӣҳӈ
੕୵ഥਯ
ड़জ४ॼঝ
യਤ
5
165 / 253
Copyright 2016 FUJITSU LIMITED
৹ਪ੥ટ ㏣ຍ
„৸৬ॹ‫ॱش‬
⛊
䢎䢏䢔䡡䡳䡨䡫䡸䡩䢇䢚䡸䢚䡬ᚅ䛱
ᩚᩘ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䝯䝰䝸䜰䜽䝉䝇ᚅ䛱
䝇䝖䜰ᚅ䛱
ᩚᩘ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᩚᩘ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᾋືᑠᩘⅬ䝻䞊䝗䜰䜽䝉䝇ᚅ䛱
ᾋືᑠᩘⅬ䢗䡬䢀䢚䡭䡴䡺䡹ᚅ䛱
ᩚᩘ₇⟬ᚅ䛱
ᾋືᑠᩘⅬ₇⟬ᚅ䛱
ศᒱ࿨௧ᚅ䛱
࿨௧䝣䜵䝑䝏ᚅ䛱
䝞䝸䜰ྠᮇᚅ䛱
䛭䛾௚䛾ᚅ䛱
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
࿨௧䝁䝭䝑䝖
䜸䝸䝆䝘䝹 ಁ㐍 䜸䝸䝆䝘䝹 ಁ㐍 䜸䝸䝆䝘䝹 ಁ㐍 䜸䝸䝆䝘䝹 ಁ㐍 䜸䝸䝆䝘䝹 ಁ㐍
6
Copyright 2016 FUJITSU LIMITED
ßÚà
nŸ,ăďôć|£jïĖüÜ¡¤—éĖýđäCªÚÔØFX100Ü_
tœÜd$Uäp¥ÔÖÊ
 
 
åñóöĔûïåä†ÎÖ¯Ú~—ÜèĖĀĖďøă
  cE¸ÜïĖü8bÙRiܯćóëXzÚ.‘LÜ$k
§¿
  MPI«%ÐâåñóöĔûïåÞܐ ßÙÜèĖĀĖĄøü
  ½.f»4¯ÞÜTofuD†åđðĐôĉ³†
~—„
  L1êČøñčO&Ûá×ØËÌÜN€ÙÍ×ÖL1êČøñč•,ä£x
§¿
 
FMA1Ć0
 
ăĐāçø÷$ƒÜ0
30
166 / 253