2.4 核融合プラズマ 5 次元格子コード GT5D の測定評価
日本原子力研究開発機構システム計算科学センター 井戸村 泰宏

2.4.1.

はじめに
GT5D コードは磁 場 閉 じ込 め型 の核 融 合 炉 における炉 心 プラズマの閉 じ込 め性 能 を決 定 する

乱 流 輸 送 現 象 の評 価 を目 的 として、日 本 原 子 力 研 究 開 発 機 構 で開 発 された第 一 原 理 プラズマ
乱 流 コードである。 核融合プラズマの第一原理モデルは 5 次元位相空間（3 次元空間×2 次元速度）における粒子分布の発展を記述する移流・拡散方程式で与えられる。GT5D コードはこの方程式を 5 次元格子上で離散化して CFD スキームを適用するため、3 次元流体モデルに比べて〜1002 倍程度大きい自由度の流体計算となる（スライド p2 参照）。現在のペタスケールマシンにおいてようやく既存装置規模の炉
心プラズマの数値実験が可能になったが、国際熱核融合実験炉 ITER のような次世代の大型装置の数値実験を行うには京コンピュータ、あるいは、将来のエクサスケールマシンが必要となる。このような大規模計算を実現する上で超並列マルチコアクラスタマシンの利用技術の高度化が必要不可欠となっている。本測定評価作業では、特に、今後の超並列マルチコアクラスタマシンにおいて重要になる、小さい
メモリバンド幅を有効利用する技術、および、10 万コア以上の超並列計算の並列化効率を向上する技術に焦点を当てて最適化技術の開発およびその有効性検証を行った。

2.4.2.

プログラム概 要
GT5D ではスライド p3 に示 すプラズマ粒 子 分 布 関 数 の移 流 ・拡 散 方 程 式 と乱 流 場 を決 めるポ

アソン方 程 式 をカップルさせてプラズマ乱 流 の非 線 形 発 展 を追 跡 する。移 流 ・拡 散 方 程 式 については移 流 項 G を取 り扱 う Gyrokinetic Solver に 4 次 精 度 無 散 逸 保 存 型 差 分 スキームを適 用し、粒 子 衝 突 項 C を取 り扱 う Collision Operator に 6 次 精 度 中 心 差 分 を適 用 する。一 方 、ポア
ソン方 程 式 を取 り扱 う Field Solver においてはトーラス方 向 にフーリエモード展 開 を適 用 し、トーラス断 面 上 で 2 次 元 有 限 要 素 近 似 を用 いる。スライド p14 に並 列 化 モデルを示 すが、GT5D では、
演 算 子 が持 っている物 理 的 対 称 性 （例 えば、移 流 項 G は v ⊥ をパラメータとする 4 次 元 演 算 子 となるのに対 し、粒 子 衝 突 項 C は R,  ,Z をパラメータとする 2 次 元 演 算 子 となる）に基 づいて各 ソル
バーの並 列 化 軸 を選 択 する。さらに、それを複 数 の MPI コミュニケータおよび OpenMP によって
構 成 する階 層 的 通 信 ネットワーク上 で実 装 することによって、全 ての通 信 処 理 を MPI コミュニケー
タの部 分 空 間 に閉 じ込 めて全 ノード間 の集 団 通 信 を回 避 する。これによってバイセクションバンド
幅 の有 効 活 用 を図 り、並 列 化 率 を向 上 する。移 流 ・拡 散 方 程 式 の時 間 積 分 には半 陰 解 法 を適用 し移 流 項 G に含 まれるスティフな線 形 移 流 項 を陰 的 に扱 う。この陰 的 ステップでは線 形 移 流 項の差 分 演 算 子 （~10 1 0 自 由 度 の非 対 称 行 列 ）が与 える連 立 一 次 方 程 式 を反 復 法 （共 役 残 差 法 ）によって解 く。このアルゴリズムをスライド p6 に示 すが、この反 復 法 ソルバーが GT5D において最 もコストが大 きいカーネルとなる。

2.4.3.

測定環境
本 測 定 評 価 作 業 では 2 種 類 の機 種 間 比 較 を実 施 した。一 つ目 の機 種 間 比 較 では、スライド p

4 にまとめるように、BX900（Nehalem-EP+InfinibandQDR8x）、Helios（SandyBridge-EP+Infinib
andQDR4x）、および、京 （SPARC64VIIIfx+Tofu）という 3 つのマルチコアクラスタ環 境 を使 用 した。Helios と京 はどちらも 8 コアのプロセッサを採 用 しているが、ネットワークについては FatTree ト
ポロジの InfinibandQDR、および、6DTorus トポロジ（ユーザービューは 3DTorus）の Tofu と大 き
く異 なる機 構 を採 用 している。このような共 通 点 と相 違 点 に着 目 して各 環 境 の性 能 を比 較 した。

もう一 方 の機 種 間 比 較 では参 考 資 料 p8 にまとめる FX1（SPARC64VII+InfinibandQDR4x）、FX
10（SPARC64IXfx+Tofu）、および、京 （SPARC64VIIIfx+Tofu）という世 代 の異 なる 3 つの SPAR
C プロセッサを使 用 した。

2.4.4.

測定結果
本 測 定 評 価 作 業 では、4.1 単 体 性 能 評 価 、4.2 通 信 性 能 評 価 、および、4.3 コード全 体 のスケ

ーラビリティ評 価 に取 り組 んだ。
2.4.4.1. 単 体 性 能 評 価
単 体 性 能 評 価 は GT5D の反 復 法 ソルバーカーネルを対 象 とし、性 能 推 定 モデルの適 用 、性能 評 価 、推 定 値 と実 測 値 の比 較 、および、機 種 間 比 較 を実 施 した。性 能 推 定 モデルの概 要 お
よびその適 用 例 をスライド p5 および p7-9 にそれぞれ示 す。このモデルは基 本 的 にいわゆるルー
フラインモデルに基 づいており、ハードウェアの B/F 比 （最 大 実 効 メモリバンド幅 /理 論 演 算 性 能 ）とアプリケーリョンの演 算 密 度 、あるいは、Byte/Flop の比 較 によって実 効 演 算 性 能 を与 えるものである。ここで、メモリアクセス Byte の評 価 においてはソースコードレベルでデータのオンキャッシュ
判 定 を行 うことによって、実 際 のメモリアクセス状 況 に近 い性 能 推 定 を行 う。オリジナル版 差 分 カーネルの評 価 をスライド p7 に示 すが、この例 では 4 次 元 差 分 において j~l 方 向 のデータはオンキ
ャッシュとなるのに対 し、i 方 向 はメモリアクセスとなる。この結 果 、Byte/Flop~1 となる。これに対 して、OpenMP のサイクリックループ分 割 による最 適 化 を適 用 した例 をスライド p8 に示 すが、この場
合 には i 方 向 のデータも隣 接 スレッドがロードしたデータの再 利 用 によってオンキャッシュとなる。
この結 果 、Byte/Flop~0.5 となり、演 算 密 度 が大 幅 に向 上 する。インテル系 の BX900 および Helios ではこのカーネルを採 用 している。スライド p9 はさらに差 分 演 算 を i,j 方 向 と k,l 方 向 に分 割 した京 における最 適 化 カーネルの例 を示 す。この例 では演 算 密 度 が Byte/Flop~0.85 まで低 下 するが、京 においてはデータプリフェッチの観 点 からループボディを調 整 することが必 要 であった。
スライド p10 は上 記 最 適 化 前 後 でのカーネル処 理 性 能 の測 定 結 果 を示 す。最 適 化 によって反 復 法 ソルバーの差 分 演 算 部 分 、ベクトル演 算 部 分 、どちらのメモリバンド幅 も STREAM ベンチ
マークが与 える最 大 実 効 メモリバンド幅 （コアあたり 5.76GB/s）に近 づき、演 算 性 能 も向 上 している。これに伴 い、ベクトル演 算 部 分 の実 効 演 算 性 能 は推 定 値 （スライド p6 参 照 ）にかなり近 づいている。しかしながら、差 分 演 算 部 分 の実 効 演 算 性 能 は依 然 として推 定 値 の 2/3 程 度 にとどまっている。この原 因 を特 定 するために、スライド p11 ではプロファイラ情 報 を詳 細 に調 べた。この結 果 、
演 算 待 ちや SIMD 化 率 の低 下 は見 られなかったが、SIMD 演 算 における積 和 SIMD 演 算 の比率 が全 体 の 1/3 程 度 に留 まっており、FLOPS 換 算 で 2/3 程 度 の性 能 となっていることがわかった。
積 和 SIMD の比 率 は実 効 演 算 性 能 に大 きく影 響 する要 因 であるが、カーネルのアルゴリズム、コ
ンパイラ最 適 化 等 に依 存 する要 素 であるためルーフラインモデルのような系 統 的 な数 値 化 が難 しい。このため、性 能 推 定 においてはそれぞれの問 題 に応 じて積 和 SIMD の比 率 を考 慮 した補 正が必 要 になる。
スライド p12 は GT5D カーネル処 理 性 能 の Intel 系 プロセッサと京 の機 種 間 比 較 を示 す。ベク
トル演 算 部 分 の処 理 性 能 はほぼメモリバンド幅 に比 例 して決 まっており、京 の処 理 性 能 が最 大 となる。一 方 、差 分 演 算 部 分 に関 しては Intel 系 のプロセッサ環 境 の処 理 性 能 が高 い。Intel 系 の環 境 では演 算 密 度 が最 も高 いスライド p8 の最 適 化 版 を使 用 していることがこの原 因 と考 えられる。
Intel 系 の環 境 においても差 分 演 算 部 分 において推 定 値 と実 測 値 の乖 離 が大 きい。

参 考 資 料 p4-7 はスライド p12 と同 じテストを 3 つの SPARC プロセッサで比 較 した結 果 を示 す。
このテストでは全 て京 と同 じ最 適 化 カーネルを使 用 したため、演 算 の最 適 化 に大 きな違 いが無 く、ベクトル演 算 部 分 （スライドで main と表 記 ）および差 分 演 算 部 分 （スライドで l4dx と表 記 ）の両 方において、処 理 性 能 は参 考 資 料 p8 に示 すメモリスループット（Stream Triad）の性 能 比 と良 く対
応 することがわかった。
2.4.4.2. 通 信 性 能 評 価
GT5D における MPI 通 信 の一 覧 をスライド p14 に示 す。ここで、Gyrokinetic Solver の 2 次 元
方 向 の袖 領 域 通 信 と Collision operator のデータ転 置 が主 要 なコストを占 めるため、これらの通信 を演 算 とオーバーラップして通 信 コストを削 減 する通 信 マスク手 法 を開 発 した。
袖 領 域 通 信 に関 しては、差 分 演 算 を袖 領 域 データを参 照 する部 分 としない部 分 に分 割 し、後者 を通 信 と同 時 処 理 することによって通 信 のオーバーヘッドを削 減 する。開 発 にあたり、まず、ス
ライド p15 に示 す非 同 期 通 信 （mpi_isend/irecv）と演 算 の同 時 処 理 の問 題 を調 査 したところ、従来 の多 くの MPI ライブラリ（富 士 通 、Intel、Bull）で採 用 している RendezVouz プロトコルでは、MPI 処 理 と演 算 処 理 の干 渉 によって、非 同 期 通 信 を開 始 するのに必 要 な制 御 通 信 がスタックし、通信 と演 算 の同 時 処 理 が機 能 しないことがわかった。この問 題 を回 避 するためにスライド p16 に示
す 2 つの通 信 マスク手 法 を開 発 した。演 算 中 に mpi_test を定 期 的 に呼 び出 す方 法 では、演 算
中 に一 時 的 に MPI 処 理 を復 帰 させて、RendezVouz プロトコルの制 御 通 信 を促 進 する。一 方 、O
penMP によって通 信 スレッドを実 装 する方 法 では、マスタースレッドを通 信 完 了 まで通 信 専 用 に割 り当 てることによって MPI 処 理 と演 算 処 理 の干 渉 を回 避 する。スライド p17 に示 す測 定 結 果 では、これらの手 法 によって通 信 のオーバーヘッドを大 幅 に削 減 できることを確 認 した。京 は 4 つの通 信 コントローラを搭 載 するため、mpi_sendrecv を mpi_isend/irecv に変 えるだけで通 信 コストが半 減 する。さらに、通 信 マスク手 法 を適 用 すると、mpi_test を呼 ばない場 合 には上 記 問 題 によって通 信 コストが mpi_wait のコストとして残 るのに対 し、mpi_test を呼 び出 すことによって通 信 と演
算 の同 時 処 理 が機 能 し、通 信 のオーバーヘッドが大 幅 に削 減 される。ここで、マスタースレッドで発 生 する mpi_test のコストは僅 かである。一 方 、通 信 スレッドを用 いる場 合 にも通 信 のオーバー
ヘッドは大 幅 に削 減 されるが、これはマスタースレッドで発 生 する通 信 コストを 8 コアで分 け合 うことに相 当 する。FatTree トポロジの Helios では袖 領 域 通 信 コストが京 に比 べてかなり大 きく、その分 、通 信 マスク手 法 のインパクトも大 きい。
通 信 スレッドを用 いる手 法 は非 同 期 通 信 だけでなく、同 期 通 信 や集 団 通 信 にも適 用 できる汎用 性 の高 い手 法 である。そこで、GT5D ではスライド p.18 に示 すようにデータ転 置 にこの手 法 を適用 した。スライド p13 に示 すように Gyrokinetic Solver と Collision Operator は異 なる並 列 化 軸を用 いるため、Collision Operator の処 理 前 後 でデータ転 置 、逆 転 置 が発 生 する。ここでは、この並 列 化 軸 と関 係 ない  方 向 に処 理 全 体 を分 割 し、さらに、データ依 存 性 のないインデックス間
でデータ転 置 、逆 転 置 、および、演 算 を組 み合 わせて通 信 スレッドを実 装 した。スライド p19 に示す測 定 結 果 では、この通 信 マスク手 法 の適 用 によって 2〜3 割 の処 理 コスト削 減 を確 認 した。
2.4.4.3. コード全 体 のスケーラビリティ評 価
スライド p20 に既 存 装 置 規 模 の中 規 模 パラメータを用 いて測 定 した GT5D コードのストロングス
ケーリングを示 す。まず、FatTree トポロジの Helios と BX900 では Torus トポロジの京 に比 べて通信 コストのスケーリングがかなり異 なる。しかしながら、どの環 境 においても通 信 マスク手 法 の適 用によって、通 信 コストが大 幅 に削 減 され、実 効 演 算 性 能 が 2〜3 割 増 大 する。

この傾 向 は、参 考 資 料 p2-3 に示 す 3 つの SPARC 環 境 の測 定 結 果 にも見 られ、最 適 化 前 のバージョンに比 べて、通 信 マスク手 法 の適 用 によって大 幅 な処 理 性 能 向 上 が実 現 している。ただし、8 コアの京 、16 コアの FX10 に比 べて 4 コアの FX1 では通 信 スレッドのオーバーヘッドが大 き
くなることから、性 能 向 上 は~7%程 度 に留 まっている。また、通 信 コストが削 減 された結 果 、参 考
資 料 p3 に示 す機 種 間 の性 能 比 が単 体 性 能 比 に近 い値 となっていることもわかった。
スライド p21 に ITER 規 模 の大 規 模 パラメータを用 いて測 定 した GT5D コードのストロングスケ
ーリングを示 す。この性 能 測 定 では通 信 マスク手 法 の適 用 によって通 信 コストをほぼ一 定 のレベ
ルに抑 制 し、その結 果 、約 20 万 コアまで良 好 なストロングスケーリングを確 認 した。このデータから
評 価 した並 列 化 率 は~99.9998%に達 し、スライド p20 に示 した BX900 上 の as is コードのストロ
ングスケーリングに比 べて一 桁 以 上 の並 列 化 率 向 上 を達 成 した。

2.4.5.

まとめ
今後の超並列マルチコアクラスタマシンで重要となる、小さいメモリバンド幅を有効利用する技術、および、超並列計算の並列化率を向上する技術の一例として、共有キャッシュ利用手法、および、通信
マスク手法を GT5D コードに適用し、その有効性をペタスケールのマルチコアクラスタマシンで検証した。特に、今回開発した通信マスク手法は、将来のエクサスケール計算に向けて重要となるストロング
スケーリングの向上に極めて有効であることが示された。

ĞħĕěƎƠŲƜƖŖRÝ|6O.·¾ù±pQSS·ƔƞſŴŨűƜŹŽmÍWG
! Ã6©ƎƜźƔ ŴƤƄGT5DŖ×! RªJ! ůƤƇƞŴƤƄŕUŉŤ5mÍÝ! ìƔŹűqŕUŉŤìmÍÝ! GT5DŴƤƄŖŹƃƠƢŲŹųƤƝƢŲ
1

Ð;ƎƜźƔŖ ŷƕƚƟƤŷƛƢ!

Gyrokinetic Torodial 5D Eulerian Code GT5D
[Idomura et al., Comput. Phys. Commun (2008); Nuclear Fusion (2009)]

v⊥"
v//
z
y
x

!
!
!



v⊥"

v//

jmÍƦÕËŶŪźƧŧRŉŤƎƜźƔ éêŧÝƣ ËŒí_Ŗ¯ŔŤƎƜźƔÅOŖžŪƅƕűŹŧ5¿úőÓ¨ÕËŶŪź1mŀŢ ŖWŹųƤƞ1mmŜő%Û
Ĵ1005=1010Î­_ÙŖ ÜÄ2Ð;ƎƜźƔÛĞħĕěŴƤƄŖÜÄƘƂƞ[Idomura et al., J. Comput. Phys. (2007); Comput. Phys. Commun. (2008); Nucl. Fusion (2009)]
!

ƎƜźƔ%\Ŗºƣrx{»` (R,f= G[f ] + C[f ]t⇥f
G[f ] = U1 [ ] ·⇥R, Z, vk , v? )U2 [ ]
2

C[f ] =v

· (D1 f ) +v v¢ñ1Š IŕšŤºƦGyrokinetic SolverƧ

: (D2 f )űƤƠƢÒÀ0ƦCollision OperatorƧ

4Æ_ xðPF[%ƦÖŹŰƤƖƧ+3ü²~ú½%b[ŕšŤāU¹Ñ&ŖîÁ{»`ŖüÛżƞƊƤ!
!

IŧŞŤƓŨżƢ{»` (⇥,

!

⇥f
⇥vk

⌅? · (P1 ⌅? ⇥) + P2 (⇥!
!

2û×É (⇥,FFT(')

)

, ⇤)

Z

ζ"

⇥⇥⇤) = [f ]aψ"ƦField SolverƧ

θ
ϕ"

R

R0
3

mÍRŕ¬ŇōƔƞſŴŨªJ

K(Riken)

Helios(IFERC)
BX900(JAEA)

CPU

BX900(Fujitsu,Rank84)

Helios(Bull,Rank12)

K(Fujitsu/Riken,Rank2)

Nehalem-EP(4core)

SandyBridge-EP(8core)

SPARC64VIIIfx(8core)

1.5PF(172.8GF/CPU)

11.3PF(128GF/CPU)

Performance 0.2PFlops(46.88GF/CPU)
Memory

51TB

282TB

1,410TB

B/F ratio

0.54

0.3

0.5

Cores

17,072

70,560

705,024

Network

InfinibandQDR8x(8GB/s) InfinibandQDR4x(4GB/s)

Tofu(5GB/s x 4)

Topology

Fat TreeFat Tree

6D Torus

Power

0.83MW

2.2MW

12.7MW
4

5mÍvRƘƂƞŖ×!

×żƤŹŴƤƄƟƐƞőŰƙƀŷƚ0ŧÌnŇōByte/Flopŧ½Ä
! MS0ƗƘƝƊƢƄ]B/FŒŖ§ŀŢS0ÍŧÄ$ƦrooflineƧ
Ex. B/F=0.36ƦSTREAMƧŕĿńŤByte/Flop=1ŖŴƤƄmÍ Ĵ 36%!

!

mÍvRŕĿńŤR
!
!
!
!

!

ŐŖ1WyÄ?Ł½@Ä?
ŐŖ1WyÄ?/ƗƘƝŨűŻŹ?ŁSIMD2ņťŐļŤƗƘƝŨűŻŹŖŝŧÌnŇL1/L2ŰƙƀŷƚŨűŻŹŗÌnŇŔļ
MS0ƗƘƝƊƢƄ]ŧSTREAMƐƢſƔƤűmÍŒRŉŤ

mÍvRß[Ŗ×C!
!
!
!

ŴƢƋŪƜó2ŕšŤ1WyÄŖŰƙŷƚŨűŻŹdŎŖ-;ŁMłļI;½@?ĿšŘSIMDŁŦťŔļI;
1WyÄdŎĹ?ƍŬƀſdŎŁ±«ŇŐļŤI;5ĞħĕěůƤƇƞ!

!

[%ÄOŖāU¹Ñ&AŁľŤîÁ{»`Ax=bŧ8iőÛŃ! 4Æ_4[%ÄOƦÖŹŰƤƖƧĴ17ŹƁƢŷƞ
10! 10 ŖāU¹Ñ&
Ĵ°Ñ&ÈƘƤƄőşÑ&ŒŇŐsŉŤŅŒŁEĀ
b[r0 = b – Ax0, p0 = r0
" [%Äõ%do j=0,1,…
Byte/Flop~1Ʀ0.85Ƨ
αj = (rj, Arj) / (Apj, Apj)→©ãƌƤű~36%Ʀ42%Ƨ
" ƐűƃƞÄõ%
xj+1 = xj +αj pj
Byte/Flop~7
rj+1 = rj –αj Apj→©ãƌƤű~5%βj = (rj+1, Arj+1)/(rj, Arj)
ĳstream benchmark B/F~0.36
pj+1 = rj+1 + βj Apj
cf.[4ĹHPCS2012; Williams,ACM2009]
Apj+1 = Arj+1 + βjApj
enddoĴ8iĻōţƪBŖÑ&Ɛűƃƞ½Ĺè²µƗƘƝ
6  
        !"# ! " #      






Byte/FlopŖÝĵŮƝŸƅƞ[%ůƤƇƞ!

ö&ŶŪźƮ132x68x44x44#  !&  !*  !)  !( 5;68?AC "" !(!( @8:&@='6?&9<*>%
" !)!) 
!A7?;(&.0+
" !*!* 
!A7?;$)&451
"  !&!& A,2/-3$)&451
(    (#    (&(# (# &(  ( ()    
)#   
 )&)# )# &)  ) )
*    
*#   
132 *&*# *# &*  * *&  &#  
 !! 
 &&&# &# &&  & & "" ( 
## (# 
 
!

( &(#  (# &(  (( !
)   
!!!!!!
)#    
" 

) &)#  )# &)  ) ) "
*   
""""""#

*#   
#

* &*#  *# &*  * * ######&  
&#   



& &&#  &# &&  & & 
!
"' 
 ( ) * &   (  )  *  & !

 "' $ 
 %
! ! ! ! ! !     "  

 "  
!"" " " " " " !"#  
#  
!"# # # # # # !"  
  

f(-1:nv+2,-1,nz+2,-1:ny+2,-1:nx+2)
1kb
71kb
3mb
140mb
!

ƭ[%ŖŮƢŰƙƀŷƚ'RƦ6mbƧlƮć8b x 5 = 40b Ĵon cachek: 1kb x 5 = 5kb Ĵon cache
j: 71kb x 5 = 355kb Ĵon cache
i: 3mb x 5 = 15mb Ĵmemory access" ƗƘƝŨűŻŹ
L/S + 6 x L = 8 = 64Byte" Ä
add 24 + sub 11 + mult 31 = 66FlopĴByte/Flop~17        !"# ! " #  JAD-JG.>I-BF1H,

   &( K@IE/-572

&( K@IE+0-<=8
#K3964:+0-<=8

(%!
&+

&/

&.

&- 


Byte/FlopŖÝĶŶŪűƝƀű%-£ůƤƇƞ!

ƭ[%ŖŮƢŰƙƀŷƚ'RƦ6mbƧ)**" 0312456.%"

lƮć8b x 5 = 40b Ĵon cachek: 1kb x 5 = 5kb Ĵon cache
j: 71kb x 5 = 355kb Ĵon cachei: Ĵon cache!
i{=[%Ŗi±1Ĺi±2ƂƤŽŗŶŪ
űƝƀű%-őŗþuŹƟƀƄŁƠ
ƤƄŇōŰƙƀŷƚƜŪƢŧ"(¬!
ŹƟƀƄúŪƢƊƜƢŹŗi±1Ĺi±2ŖƗƘƝŨűŻŹŖŮƤƊƤƏƀƄ
ŕšŏŐÎe²ŕ" ƗƘƝŨűŻŹ
L/S + 2 x L = 4 = 32Byte" Ä
add 24 + sub 11 + mult 31 = 66FlopĴByte/Flop~0.5'" &-&- @8:&@='6?&9<*>%
'# &.&. 
!A7?;(&.0+
'$ &/&/ 
!A7?;$)&451
'% &+&+ 132!-%!%$#"!%$#"  A,2/-3$)&451
!-(!%$#"!%$#" !%-+-(%!-( +-%%!-%-"!.%!%$#"!%$# "!.(!%$#"!%$# "!%.+.(%!.( +.%%!.%."!/%!%$#"!%$ #"!/(!%$#"!%$ #"!%/+/(%!/( +/%%!/%/"
132!+%!%$#"!% $#"!+(!%$#"!% $#"!%+++(%!+( ++%%!+%+"!-% !%$#"!%$#" !-( !%$#"!%$#" !%- +-( %!-( +-% %!-% - "!.% !%$#"!%$# "!.( !%$#"!%$# "!%. +.( %!.( +.% %!.% . "!/% !%$#"!%$ #"!/( !%$#"!%$ #"!%/ +/( %!/( +/% %!/% / "!+% !%$#"!% $#"!+( !%$#"!% $#"!%+ ++( %!+( ++% %!+% + "!%',  !%-!%.!%/!%+  !%- !%. !%/ !%+ !%$#"!%$#" *!%', )%
! ! !%$#" !!!%$#"!%$#" &' &' &' &'


A 

8

  Byte&

 

L2




 


!%$#"

$ #%/"#!
2 Byte64  
        !"# ! " #      




( %! &+  &/  &.  &- )**" 0312456.%"
'" &-&- '# &.&. @8:&@='6?&9<*>%
'$ &/&/ '% &+&+ 
!A7?;(&.0+
!/%!%$#"!%$ #"!A7?;$)&451
!/(!%$#"!%$ #"A,2/-3$)&451
!%/+/(%!/( +/%%!/%/"!+%!%$#"!% $#"!+(!%$#"!% $#"!%+++(%!+( ++%%!+%+"!/% !%$#"!%$ #"!/( !%$#"!%$ #"!%/ +/( %!/( +/% %!/% / "!+% !%$#"!% $#"!+( !%$#"!% $#"!%+ ++( %!+( ++% %!+% + "
132 
!%$#"  !%/!%+  !%/ !%+ &' &' &' &')**" 0312456.%"
'" &-&- '# &.&. '$ &/&/ '% &+&+ !-%!%$#"!%$#" !-(!%$#"!%$#" !%-+-(%!-( +-%%!-%-"!.%!%$#"!%$# "!.(!%$#"!%$# "!%.+.(%!.( +.%%!.%."!-% !%$#"!%$#" !-( !%$#"!%$#" !%- +-( %!-( +-% %!-% - "!.% !%$#"!%$# "!.( !%$#"!%$# "!%. +.( %!.( +.% %!.% . "!%',!%$#"  !%-!%.  !%- !%. !%$#"!%$#" *!%', )%
! ! !%$#" !!!%$#"!%$#" &' &' &' &'

Byte/FlopŖÝķƞƤƎ%-£ůƤƇƞ!

ƭ[%ŖŮƢŰƙƀŷƚ'RƦ6mbƧlƮć8b x 5 = 40b Ĵon cachek: 1kb x 5 = 5kb Ĵon cache
j: 71kb x 5 = 355kb Ĵon cachei: Ĵon cache!
ƞƤƎƒƂũŖâzŧ´²ŒŇ
ōƞƤƎ%cf.ƉƤƄūŬŨƎƝƍŬƀſŖûŹƃƝƤƖyŗ16!
4[%ŕĿļŐăG%-{=Ʀi,jƧŒŌťKƦk,lƧŕƞƤƎ%" ƗƘƝŨűŻŹ
2 x L/S + 3 x L = 7 = 56Byte" Äadd 22 + sub 11 + mult 33 = 66FlopĴByte/Flop~0.85

A 

9

Byte&
134

ŕĿńŤĞħĕěůƤƇƞŖó2
!

!

KŕĿńŤó2! ö&ŖƋƂũƢŲĴŰƙƀŷƚÂ;BôƦƐűƃƞÄƧ! OpenMPŶŪűƝƀűƞƤƎ%-ĴŰƙƀŷƚ(¬0§=Ʀ[%ÄƧ! Ƭxyzv[%ŧvz[%ƦŮƢŰƙƀŷƚƧƨxy[%ŕƞƤƎ%ĴŹƃƝƤƖy+ŕšŤÄó2ŖïƦ[%ÄƧƈƤƄ!SMP#©mÍĳƈƤƄĻōţö&ŶŪźƮ48x80x64x100=200MB
¼

#©

msec

[%Ä

64.60

K
ƐűƃƞÄ 66.11
ƦASISƧ
130.68

[%Ä

45.15

K
ƐűƃƞÄ 60.65
Ʀó2Ƨ
105.80
!
!

GF/core peak ratioGB/s/corepeak ratio
3.08

19.24%

3.67

45.91%

0.67

4.19%

4.78

59.80%

1.86

11.63%

4.23

52.91%

4.29

26.78%

4.49

51.57%

0.74

4.64%

5.20

63.85%

2.26

14.10%

4.90

58.55%

ƐűƃƞÄõ%ŗŚśvRìţŖmÍ
[%Äõ%ŗvRŖ2/3»_ŖmÍĴŴƢƋŪƜó2ŖAĄƯ10ŕĿńŤĞħĕěůƤƇƞ¥m%
ĦĠĢě?§Ĳ
ĦĠĢěÄ?§Ĳ ĦĠĢěƠƤƄ?§Ĳ ĦĠĢěŹƃŨ?§ĲĉďĦĠĢěUäĲ
ĉďĦĠĢěUäÄĲ ĉďĦĠĢěUäƠƤƄ ĉďĦĠĢěUäŹƃŨ
?yƧ
?yĊ
?yĊ
?yĊ
ĘėĎĒđĈęęĎĘĘĈęęĎĘėĈęęĎĘęĈđĐĐĎĐĐĈėĘĎęĒĈęęĎĒęĈęĘĎđęĈđĐĐĎĐĐĈđĐĐĎĐĐĈ1WyÄ ĦĠĢě1WyĲ
1WyĲ
ĦĠĢě1WyĲ
1WyĲ?yÄ?y
Ä?y
½@Ä?y ½@Ä?yĕĎĘĔĜċđĐēĎĘēĜċđĐėĎĕēĜċĐėĒĎĐĐĜċđĐĕĎĘĒĜċĐĔęĎĕĘĜċĐęėĎĒĐĜċĐĘđĎėĔĜċĐĘĘĎĖęĜċĐęđĎĐđĜċĐē

ĦĠĢě?§Ĳ
ĉď0Ê?yĊ[%ÄƐűƃƞÄ[%ÄƐűƃƞÄ



 





4 
 


2/3  

1 



FP 
 

FP   



FP 

FP 











!

FP   

!

 











ÄdŎŖaĂŗŌťŚœØŢťŊĹSIMD2§şŚś100%ĺ[%ÄŖ½@SIMDŖ§ŗ1/3»_ƦFLOPSwÄő2/3»_Ƨ
11¯ŔŤƔŷƢúőŖĞħĕěůƤƇƞ#©mÍŖè
¼

#©

msec

GF/corepeak ratio

FX1
4SMP
S0B/F~0.3
ó2Ķ
BX900
4SMP
S0B/F~0.37ó2Ķ
Helios
8SMP
S0B/F~0.21
ó2Ķ
K
8SMP
S0B/F~0.36
ó2ķ

[%Ä

146.682.64

26.38%

ƐűƃƞÄ

184.46

0.49

4.89%



331.171.44

14.42%[%Ä

101.293.82

32.60%

ƐűƃƞÄ134.53

0.67

5.72%



235.822.02

17.28%

[%Ä

28.14

6.88

31.83%

ƐűƃƞÄ

66.27

0.68

3.15%



94.40

2.53

11.71%

[%Ä

45.15

4.29

26.78%

ƐűƃƞÄ

60.65

0.74

4.64%



105.802.26

14.10%

FX1:SPARC64 VII (2.5Ghz, 10Gflops/core, L1-64kB/core, L2-6MB/CPU, B/F=1)
BX900:Nehalem-EP (2.93Ghz, 11.72Gflops/core, L3-8MB/CPU, B/F=0.546)
Helios:SandyBridge-EP (2.7Ghz, 21.6Gflops/core, L3-20MB/CPU, B/F=0.3)
K: SPARC64VIIIfx (2Ghz, 16Gflops/core, L1-32kB, L2-6MB/CPU, B/F=0.5)
12ĞħĕěŴƤƄŖýY²&2SÕ!

4×Ʀ2×1ƧMPI-2SMPŖ

Field solver(ψ,θ,ϕ) !

1DFFT+2DFEM

[Idomura,SC11,Seattle]

MPI$
layer1

µ1

µ1

µ2

µ2

µ3

µ3

µ4

µ4

MPI$
layer2

n1

n2

n1

n2

n1

n2

n1

n2

SMP$layer (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2 (ψ,θ)1 (ψ,θ)2

layer2$transpose$(R,Z,µ1) ↔$(n,µ1)

layer2$transpose$(R,Z,µ2) ↔$(n,µ2)

layer2$transpose$(R,Z,µ3) ↔$(n,µ3)

MPI$
layer1

µ1

µ1

µ2

µ 2

µ3

µ 3

µ4

µ 4

Gyrokinetic solver(R,ζ,Z,v//)!

MPI$
layer2

(R,Z)1

(R,Z)2

(R,Z)1

(R,Z)2

(R,Z)1

(R,Z)2

(R,Z)1

(R,Z)2

4Dº

SMP$layer(ζ,v)1 (ζ,v)2

(ζ,v)1 (ζ,v)2 (ζ,v)1 (ζ,v)2 (ζ,v)1 (ζ,v)2 (ζ,v)1 (ζ,v)2 (ζ,v)1 (ζ,v)2 (ζ,v)1 (ζ,v)2 (ζ,v)1 (ζ,v)2

MPI$layer1$transpose$[(R,Z)1,µ] ↔$(R,Z)1a~d
MPI$
layer1,2

Collision operator!
(v//,µ)!

2Dºƣrx
!
!
!

SMP$layer

(R,Z)1a
(ζ,v,
µ)1

(ζ,v,
µ ) 2

layer2$transpose$(R,Z,µ4) ↔$(n,µ4)

(R,Z)2a(ζ,v,µ ) 1(ζ,v,µ ) 2

(R,Z)1b
(ζ,v,
µ)1

(ζ,v,
µ)2

MPI$layer1$transpose$[(R,Z)2,µ] ↔$(R,Z)2a~d(R,Z)2b
(ζ,v,
µ)1

(ζ,v,
µ)2

(R,Z)1c
(ζ,v,
µ)1

(ζ,v,
µ)2

(R,Z)2c
(ζ,v,
µ)1

(ζ,v,
µ)2

(R,Z)1d
(ζ,v,
µ)1

(ζ,v,
µ)2

:żƞƊƤŖ¤©²U¹mŕlňŐ¯ŔŤ&2çŧt¬ýY²ìSÕŕšţƈƤƄúÿDìŧBô¨¦ŖM&_ŗ32×Ʀ32×24ƧMPI×8SMP=196,608&(R,Z)2d
(ζ,v,
µ)1

(ζ,v,
µ)2

13

ĢĤĠìƋŽƤƢ!

16,384ŴŨŖì÷
Problem Size:(NR,Nζ,NZ,Nv//,Nµ)=(240,64,240,128,32)
Parallelization: nMPI1 × nMPI2 × nSMP = nµ × (nR × nZ ) × nSMP = 32 × (8 × 8) × 8 = 16,384

Solverfield

gyrokinetic

collision

MPI
mpi_gather
mpi_allreduce
mpi_scatter
mpi_sendrecv
mpi_sendrecv
mpi_allreduce
mpi_sendrecv
mpi_sendrecv
mpi_alltoall
mpi_alltoall

CommunicatornR × nZnµnR × nZnR
nZnR × nZ
nR
nZ
nµ
nµ

Byte/node
14,400126,608
14,40087,52287,5228
3,932,160
3,932,160
1,959,936
1,959,936

Call/step222
22
8 × Niter
2 × Niter
2 × Niter22e 1: Summary of
R , Nζ , NZ , Nv! , Nµ ) = (240, 64, 240, 128, 32), (Nψ , Nθ , N
ĳ communication
ŖI;ŗnµ × nR data
× nZ =size
32 × for(8 × (N8)ŖƫƃƓƠŸŧ¬384, 64), and nR × nZ × nµ = 8 × 8 × 32 = 2048 processes. Ntier is the number of iterations in an iteraĴsendrecvŗþuì
rix solver for the implicit part of the ASIRK.

Ĵalltoallŗ1ƃƓƠŸĳ8byteŖallreduceŗ V¬ŨƞŵƝźƖ
of this traditional problem, and resolved it with two
the communication processes are 2D buffer data comm!
ŴŹƃŖMłļÔìƦsendrecvƧŒƂƤŽæËƦalltoallƧŖìƔŹűqŧù±
ent approaches. mpi_isend/irecv with the buffer size
cations in (R, Z). We decompose the calculation proce a threshold value is processed based on so called theezvous protocol, in which an exchange of control seces between two communication nodes is required to

14
in two approaches. In the first approach (Surface-cor
composition), we decompose the calculation into a (Rsurface part, which refers the buffer data, and the remìƔŹűqù±ŕĿńŤā<ìŖAĄ!

øƗƀŻƤŸƦ512KiBƧŖæêŗRendezVousƎƠƃŴƞŕšŏŐ#©
ņťŤōŞƩSƂƤŽŖæê,ŕMPIŖ)hìŁ1cik×
MPI_Isend)h

MPI_Irecv

Ä

cf. [ ƎƠŻŹ&ſƚƤƆƢŲſƚƤƃƝŨƞ]
ĸĸ[¶ZĹÃ1B ìH³WSĹŭűŶWG]ĸĸ[Sayantan,PPoPP2006]ĸĸĸÄ

MPI_WaitŕŏŐŠŏŒŖ)hì
ŧ$ŋŤ

)h
æê

MPI_Wait

MPI_IsendŀŢŖ)hìŁXļō~ŕŖ)hìŧ$ŋŔļ

MPI_WaitìŒÄŁ
ŮƤƊƤƜƀƎŇŔļ)h
15ìƔŹűqŖSÕƦÔìƧ!

!

ÔăGŧ7¡ŉŤÜÄŒ7¡ŇŔļÜÄŕ%! ÜÄăGŖjăGŒÔŧ7¡ŉŤJ®ăG! ÔìŧÑĽƦxyƧŒÑŦŔļƦzvƧ

ĵÔì

Ķ[%

ÔăGŧ7¡ŇŔļÄŒÔìŧŮƤƊƤƜƀƎ
B. mpi_testŧÜÄëŕ>Ř$ŉŅŒŕšŏŐ)hì#©ŧïC. ƔŹŽƤŹƟƀƄŁŐŖì#©ŧSÑŇĹÄ#©ŧdynamic%Ĵā<ìĹ<ìĹÿDìő(¬9Í

A. Blocking comm.

calc.

copy

B. Overlap with Testall

sendrecv

Isend/Irecv

C. Overlap with OpenMP

testall

waitall16ĞħĕěŖÔì#©ŖmÍÝ
Gyrokinetic solverŕĿńŤ[%ÄŖ#©ŴŹƃ!

ƂƤŽŶŪźƮć(NR,Nζ,NZ,Nv//,Nµ)=(240,64,240,96,32)
ăG%-ƮnR×nZ×nµ=8×8×32ƦÔìƮnR×nZ=8×8Ƨ
(a)K
copy"

comm."

800"

calc."

700"

700"

600"

600"

500"

500"

msec

msec

800"

400"

300"

200"

200"

100"

100"

comm."

calc."

B"(w/o"testall)"

B"

C"

0"
A"(sendrecv)" A"(isend/
irecv)"

ĳ

copy"

400"

300"

0"

(b)Helios

B"(w/o"testall)"B"

C"

A"(sendrecv)" A"(isend/
irecv)"

ŖmÍŗzŷŹƁƖŕšŤR
!
!
!
!

ħĪİıĩĬĬ£ĹģįĪĭĢĤ£œŎŢŖ{őşìŖŮƤƊƤƜƀƎŕo/ŮƤƊƤƜƀƎŕšŤ[%ÄřŖaĂŗûR²őÇđĕƥĹğĪĬīĮİőÇĔđƥŖmÍ=ĚĨęĐĐČĝĨđőş0mŧ¸Þ17ìƔŹűqŖSÕƦƂƤŽæËƧ!

#©Ŗ×
Step1:transpose f from (R,Z,µ)-decomposition to (R,Z)-decomposition
Step2:calculations for collision operator in (v//,µ)Step3:transpose f from (R,Z)-decomposition to (R,Z,µ)-decompositionĴStep1~3ŧζ%-ŇĹ<ÿDìŧìŹƟƀƄőSÑ
Originalcalc.

ζ-decomposition

alltoall for transpose

Overlap with OpenMP

alltoall for inverse-transpose18ĞħĕěŖƂƤŽæË#©ŖmÍÝCollision operatorŖ#©ŴŹƃ!

ƂƤŽŶŪźƮć(NR,Nζ,NZ,Nv//,Nµ)=(240,64,240,96,32)
ăG%-ƮnR×nZ×nµ=8×8×32→nR×nZ×nµ=64×32×1(a)K(b)Helios

800"

comm."

calc."

600"

600"

500"

500"

400"
300"

calc."

400"
300"

200"

200"

100"

100"

0"

0"
Original"

ĳ

comm."

700"
msec

msec

700"

800"

Overlap"

Original"

Overlap"ŖmÍŗzŷŹƁƖŕšŤR
!
!
!
!

ēĒƎƠŻŹúŖĩĬĬıĮĩĬĬŧìŹƟƀƄŧ¬ļŐŮƤƊƤƜƀƎŮƤƊƤƜƀƎŕšŤÄřŖaĂŁMłļĴŰƙƀŷƚ^ƯőÇđęƥĹğĪĬīĮİőÇēĒƥŖmÍ=ĚĨęĐĐČĝĨđőş0mŧ¸Þ19ĞħĕěŴƤƄŖŹƃƠƢŲŹųƤƝƢŲƦġħčĖĐÙƧ
JT-60UÙƮ(NR,Nζ,NZ,Nv//,Nµ)=(240,64,240,128,32)~1.5×1010!

ìŴŹƃ§(%)

S0mÍ(Tflops)
50"

K*asis"Helios*asis"

K*tune"Helios*tune"

BX900*asis"

40"
30"
20"
10"

50"
45"
Communica)on*Cost*(%)

Sustained*Performance*(TF)

60"

40"

K)asis"Helios)asis"K)tune"Helios)tune"

BX900)asis"

35"
30"
25"
20"
15"
10"
5"
0"

0"
0"

0"

5000" 10000" 15000" 20000" 25000" 30000" 35000"
cores

K
25TF(9.5%)Ĵ30TF(11.3%)
Helios 23TF(6.4%)Ĵ29TF(8.3%)
BX900 19TF(9.8%)
!
!
!

ĳ

5000" 10000" 15000" 20000" 25000" 30000" 35000"
cores

ŖmÍŗzŷŹƁƖŕšŤR

Torus(K)ŒFatTree(BX900,Helios)ő¯ŔŤìŴŹƃŖŹųƤƝƢŲ
ìƔŹűqŕšŏŐì#©mÍŖąå²=ŧS¨ì#©Ŗ+ŕšŏŐS0mÍŧ2030%=
20ĞħĕěŴƤƄŖŹƃƠƢŲŹųƤƝƢŲƦĠħĜĥÙƧ!

ITERÙƮ(NR,Nζ,NZ,Nv//,Nµ)=(768,64,768,128,32) ~ 1.5×1011
1ŹƁƀƎĻōţ#©~úS0mÍ(Tflops)
100000%%90000%%

300"

1207%%

comm.%

80000%%
250"

calc.%

70000%%

200"

msec/step

Sustained*Performance*(TF)

350"

150"
100"

60000%%
50000%%
40000%%

965%%
84534%%

30000%%

50"

20000%%

0"10000%%
0"50000"

100000"cores

150000"200000"!

942%%
23632%%

13040%%

0%%24576%

ĳ!

911%%
43791%%

49152%

98034%

196068%ŖmÍŗzŷŹƁƖŕšŤR

S0mÍ~10%»_ő~20ŴŨŜőÏNŔŹƃƠƢŲŹųƤƝƢŲ
Ĵ307TFlops@196,608coresg šţĆļ&2§ƦŨƖžƤƞ*Ƨ~99.9998%ŧòo
c.f.BX900ŕĿńŤASISŴƤƄŖ&2§~99.996%
21

ŜŒŞ
!

!

!

!

5mÍvRq! ŰƙƀŷƚŖ0ŧÌnŇōByte/FlopÝŕšŤƞƤƍƜŪƢƘƂƞ
! ŶŪűƝƀűƞƤƎ%-ŕšŤŹƟƀƄúŰƙƀŷƚ"(¬ŧà}! ÄT_ŖĆļůƤƇƞőŗß[ŁMłŃŔŤI;ŁĻŤ
ŕĿńŤìƔŹűq! Testall£ĹìŹƟƀƄ£ŖìƔŹűqŧSÕ! ìŹƟƀƄ£ŗ¬mŁĆŃ<ìĹÿDìŕşó¬9Í! ìƔŹűqŖó¬ŕšŏŐ&2§ŧąå²ŕ=ŒHeliosŖmÍè! [%ÄƦƐűƃƞÄƧŖS0mÍŗHeliosƦ
ƧŖ{ŁĆļ
! TofuƇƀƃơƤűŒInfinibandő¯ŔŤìŴŹƃŖŹųƤƝƢŲ
! ŴƤƄŒŇŐŗ
Ŗ{ŁĆļS0mÍĹ&2§
ŕĿńŤ fŖáĄ! ìƔŹűqŖŹƑűƃƞ
ŴƤƄƦL&2FFTƧřŖó¬! MÙ&IOƦPOSIXĹMPIIOĹHDF5ƧĹ9Ú2ƦPBVRĹOpenGLƧ
22

サイエンティフィック・システム研究会
マルチコアクラスタ性能WG資料

GT5DプログラムとGT5Dカーネルプログラムの評価結果（ご報告）
富士通株式会社
次世代ＴＣ開発本部 ＰＡプロジェクト
内藤 俊也
参考資料p1

Copyright 2013 FUJITSU LIMITED

GT5Dプログラム測定結果
 FX1、京、FX10で、実行時間を測定 (評価区間)しました。

 asis版とtune版(井戸村様提供)の２パターンを測定しました。
■FX1、京、FX10で、演算時間を測定 (全ての測定で96ノードを使用）
Type Thread

asis

tune

FX1
演算時間

1th
4th

Thread

演算時間

スケール

1th
831.53

1th
4th

スケール

■マシンの性能比

京

8th

8th

演算時間

スケール

1th

2100.351.00

318.9216th

195.4410.75

1th 1686.71

1.00

266.70

16th

11.17

1th
778.02ThreadFX10

150.94

Type

asis

tune

FX1

京

FX10

2.61

4.25

2.92

5.15

1.00
1.00
1.00
1.00

 高コストループのPA情報(FX10)
スレッド0のPA情報

Loop 1Loop 2Loop 3Loop 4Loop 5Loop 6

メモリスループット(GB/sec)
3.20
4.14
4.14
4.16
4.16
2.95

Loop2～5は、16スレッドで、約64GB/sとなっており、
メモリスループット
ネックとなっている。
参考資料p2

Copyright 2013 FUJITSU LIMITEDまとめ（GT5Dプログラム）
 GT5Dプログラムは、メモリスループットネックのプログラムとなっている。
 そのため、各マシンの性能比は、メモリスループットの実効性能比とほぼ同等であった。
FX1
FX10
京
4
8
16
マシン
演算時間
演算時間 マシン
演算時間 マシン
ThreadThreadThread
(sec)
(sec)
(sec)
性能比
性能比
性能比
asis
831.531.00 asis318.922.61 asis195.444.25
tune
778.021.00 tune
266.702.92 tune
150.94
5.15

メモリスループット
ピーク性能比

マシン名
1チップ性能1ノード性能

FX1
1.00
1.00

京
3.37
3.37

FX10
4.67
4.67

参考資料p3Copyright 2013 FUJITSU LIMITED

GT5Dカーネルプログラム測定値・プロファイル情報(FX10)

 測定ソースは、2012-04-19版（最新の最適化版）を利用
 FX1、京、FX10で、実行時間を測定 とマシン性能比
4
Thread
main
l4dx

FX1
8
実行時間
マシン
Thread(msec)
性能比
179.921.00 main
141.761.00 l4dx

 プロファイル情報(FX10)

参考資料p4

京
16
実行時間
マシン
Thread(msec)
性能比
60.97
2.95 main
45.57
3.11 l4dx

FX10
実行時間
マシン
(msec)
性能比
40.82
4.41
30.81
4.60

main = ★１＋★２
l4dx = ★３

Copyright 2013 FUJITSU LIMITED

高コストループ 高コストループのソース

参考資料p5

4

Copyright 2013 FUJITSU LIMITED

PA情報 1プロセス16スレッド(FX10)
 キャッシュの情報とPAグラフ(スレッド0から抜粋)
Performance

4.12
3.11

浮動小数点演算ピーク比
3.73%
21.28%

L1I ミス率(/有効総命令数)

L1D ミス率(/ロード・ストア数)

VEC1+VEC2 スレッド0
l4dx_s スレッド0

0.02%
0.01%

4.37%
3.14%

VEC1+VEC2 スレッド0
l4dx_s スレッド0

L2 ミス率(/ロード・ストア数)
4.53%
1.41%

実行時間 (sec)
VEC1+VEC2 スレッド0
l4dx_s スレッド0

MFLOPS
551
3146

MIPS

浮動小数点演算数
467
2299

2.27E+09
9.80E+09

16スレッドで、約64GB/sとなっており、
メモリスループットネックとなっている。

Cache

L2 ミス数
8.43E+07
7.35E+07

ロード・ストア数
1.86E+09
5.21E+09
L2 ミス dm 率(/L2 ミス数)
6.96%
5.23%

L1D ミス数
8.15E+07
1.64E+08

L1D ミス dm率(/L1D ミス数)
1.96%
16.26%

L2 ミス pf 率
メモリスループット(/L2 ミス数)(GB/sec)
93.04%
3.87
94.77%
4.03

L1D ミス hwpf 率(/L1D ミス数)

L1D ミス swpf 率(/L1D ミス数)

98.04%
70.23%

0.00%
13.50%

L2 スループット
μ DTLB ミス率
mDTLB ミス率
(GB/sec)(/ロード・ストア数) (/ロード・ストア数)
2.53
0.00173%0.00002%6.74
0.00055%
0.00001%

main
参考資料p6

Copyright 2013 FUJITSU LIMITEDまとめ（GT5Dカーネルプログラム）
 前回の会合で報告したGT5Dと同様に、今回のGT5Dのカーネル
ソースもメモリスループットネックとなっていた。
そのため、各マシンの性能比は、メモリスループットの実効性能比と同等であった。

メモリスループット
ピーク性能比

マシン名
1チップ性能1ノード性能

京
3.37
3.37

FX1
1.00
1.00

FX10
4.67
4.67

参考資料p7

Copyright 2013 FUJITSU LIMITED

添付資料
マシン諸元
マシン名
CPU数
メモリ容量
名称
周波数
core数

FX1
京
1CPU
1CPU
ノード
32GB
16GB
SPARC64™VIISPARC64™VIIIfx
2.5GHz2.0GHz4core
8core
L1命令キャッシュ
L1命令キャッシュ
CPU
64KB コア毎
32KB コア毎
L1データキャッシュ L1データキャッシュキャッシュ容量64KB コア毎
32KB コア毎
L2キャッシュL2キャッシュ
6MB コア共通
6MB コア共通
倍精度
1コア性能
10GFLOPS
16GFLOPS
演算性能
1チップ性能40GFLOPS128GFLOPS(理論性能)
1ノード性能40GFLOPS128GFLOPS
1チップ性能13.7GB/s
46.2GB/s
メモリスループット(実効性能(*))
1ノード性能13.7GB/s
46.2GB/s

FX10
1CPU
32GB
SPARC64™  IXfx
1.848GHz
16core
L1命令キャッシュ
32KB コア毎
L1データキャッシュ
32KB コア毎
L2キャッシュ
12MB コア共通
14.78GFLOPS
236.54GFLOPS
236.54GFLOPS
64.0GB/s
64.0GB/s*:STREAM benchmark のTriad性能(目安：FX1との倍精度演算性能ピーク性能比)

FX1比 倍精度
演算性能
ピーク性能比メモリスループット
ピーク性能比参考資料p8

マシン名
1コア性能
1チップ性能1ノード性能1チップ性能1ノード性能

FX1
1.00
1.00
1.00
1.00
1.00

京
1.95
3.17
3.17
3.37
3.37

FX10
1.47
5.87
5.87
4.67
4.67
Copyright 2013 FUJITSU LIMITED