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
© Copyright 2024 Paperzz