第1回XcalableMPワークショップ  /  秋葉葉原UDX  6F

XcalableMPの中間コードを利利⽤用した
Fortranコード分析ツールの紹介
November  1,  2013
寺井  優晃理理化学研究所  計算科学研究機構

概要
• 背景
• コンセプトとデザイン• 機能の紹介-‐‑‒

インターフェイス

-‐‑‒静的プログラム解析-‐‑‒

動的プログラム解析• 最近の開発状況

2

業務・活動内容•

計算科学研究機構  運⽤用技術部⾨門  ソフトウェア技術チーム

•

内容
-‐‑‒

アプリケーションの性能改善（システムの性能評価も⼀一部含む）-‐‑‒

京の⾼高度度化に関するフィードバック（コンパイラ、プロファイラ、等）-‐‑‒「京」⾼高度度化枠のユーザに対するサポート（運⽤用の⼀一部）-‐‑‒

プライベートサーバの管理理

3

アプリケーション性能改善• 性能改善  (=  チューニング)-­‐ 単体性能チューニング  ☓  ⾼高並列列性能チューニング

System Board

CPU (=compute node)

Rack

Image of 3D torus of Tofuinterconnect

864 racks(=82,944 compute nodes)
8on the K computer4

単体性能チューニング
•

本来はコンパイラが⾏行行うべき最適化を、期待する効果が得られるように⼿手動によりソースコードを書き換えること。

•試⾏行行錯誤
coding/tuning  Compiling

Execution

Evaluation•

原因と結果に基づくシステマティックなアプローチ•

アプリケーション、コンパイラ、CPUなど、性能に影響を与える因⼦子が測定に介在する。

•

⾮非設計者にとっては、個々のパーツの⼤大部分がブラックボックス（であることが多い  ⇒  チューニングの難しさ）•

チューニングはシステマティックとヒューリスティックな作業の中間領領域•

ちょっとしたパズル
5ワークフロー
Code Reading and Detecting hot-spots

南が提案するシステマティックなチューニングのアプローチ（以後、ワークフロー）•

コンパイラ、プロファイラ、デバッガ、IDEなどは、それぞれのワークフローのいずれかで使⽤用される。これらはベンダから提供されている。

•

ただし、個々のワークフローにおいて⼗十分なツールが⽤用意されているか、というとそうでもない。

Parallelization
TuningSingle Processor Tuning
Preliminary•

Extraction ofKernel code

Performance
Evaluation

Implementation

Single Node
TuningExtraction of kernel-code andPerformance tuning on a coretuning version
case2

kernel code
kernel code
kernel codetuning version
case3

waiting time forbarrier synchronization
tuning version
case4

example :case1 : loop unrolingcase2 : loop division
case3 : array fusion
case4 : case1 + case2

9.0E- 03

9.0E- 038.0E- 038.0E- 03

7.0E- 03

7.0E- 03elapsed time[sec.]

kernel code
asisPerformance tuning on a chiptuning version
case1

elapsed time[sec.]

extraction

whole application code

6.0E- 035.0E- 03
4.0E- 033.0E- 032.0E- 035.0E- 03
4.0E- 033.0E- 032.0E- 03
1.0E- 03

1.0E- 03
0.0E+00

6.0E- 03

Thread 0

Thread 1

Thread 2

Thread 3

Thread 4

Load-Inbalance

Thread 5

Thread 6

Thread 7

1.0E- 18

Thread 0

Thread 1

Thread 2

6

Thread 3

Thread 4

Thread 5

Thread 6

Thread 7•

とくに、Preliminaryでは、問題の取り掛かり⽅方に個々のエンジニアの経験に依存することが多く、ツール化が遅れていた。この数年年は、南が中⼼心となりその問題を埋めるた
め に K-‐‑‒ s c o p e を 開 発 し て きた。

ソースコード分析ツール:  K-‐‑‒scope•

ソースコードリーディングおよびホットスポットのスクリーニングのためのツール（ワークフローのPreliminaryで⽤用いることを想定）•コンセプト-‐‑‒Fortran  プログラムの論論理理構造（とくにループ、分岐、プロシージャ呼出し）を可視化し、コードリーディングを⽀支援する。

-‐‑‒京の基本プロファイラと詳細プロファイラをソースコードに対応づけて可視化を⾏行行い、動的なコード構造解析を⽀支援する。

-‐‑‒

F_̲Front  (atool)  によって⽣生成された中間コードを⽤用いることで、分析ツー
ルにおける  Fortran  構⽂文解析器の実装を省省略略する。

-‐‑‒

ポータビリティの観点よりJavaで実装-‐‑‒

OSSライセンス  (Apache  2.0  License)  で配布7

デザインの⾻骨⼦子९‫ش‬५॥‫ॻش‬(Fortran 90/77)র৑॥‫ॻش‬(Omni XcalableMP॑ਹ৷)ঈটॵॡଡୗभྴল(do-enddo, if-endif,procedure callಉ)• フォーカスすべきプログラムの論論理理構造をループ、分岐に限定しても、構造的に可視化するためには、構⽂文解析器が必要• Fortran  の構⽂文解析は（控えめに）少し⾯面倒• 解決⽅方法-‐‑‒ Omni  XcalableMPコンパイラのフロントエンドの出⼒力力Javaड़ঈ४ख़ॡॺ

（中間コード）を利利⽤用する。
-‐‑‒ F_̲Frontのロジックは取り込まずに、中間コードを利利⽤用することで、疎結合な仕組みを担保উট४ख़ॡॺ
‫ق‬ଡୗੲਾ‫ك‬-‐‑‒ 基本は、ユーザが予めソースに対応する中間コードを⽤用意しておく（K-‐‑‒scopeは中間コード作成に介在しないモードがデフォルト）。
8

JavaクラスによるFortran構⽂文の対応付け९‫ش‬५॥‫ॻش‬(Fortran 90/77)র৑॥‫ॻش‬(Omni XcalableMP॑ਹ৷)ঈটॵॡଡୗभྴল(do-enddo, if-endif,procedure callಉ)Javaड़ঈ४ख़ॡॺউট४ख़ॡॺ‫ق‬ଡୗੲਾ‫ك‬

9

ツール出⼒力力例例९‫ش‬५॥‫ॻش‬(Fortran 90/77)

スクリーンショット

ツリー形式によるプログラム
構造の可視化例

র৑॥‫ॻش‬(Omni XcalableMP॑ਹ৷)ঈটॵॡଡୗभྴল(do-enddo, if-endif,procedure callಉ)

分析ビュー例Javaड़ঈ४ख़ॡॺউট४ख़ॡॺ
‫ق‬ଡୗੲਾ‫ك‬

変数の特性一覧

変数の宣言・定義・参照の一覧

Focus
10

ツールの起動• 実⾏行行モジュール（jar形式）を以下URLよりダウンロード-‐‑‒ http://www.aics.riken.jp/ungi/soft/kscope/$  tar  xvzf  kscope_bin_${version}.tgz• インストール作業は必要なく、単純に  kscope.jar  と  properties.xml  のみで起動• ⼀一般的なPC（例例えば、CORE  i5,  メモリ4GB）で動作確認• Java  7が必要

$  java  -­‐jar  kscope.jar• もし、メモリ不不⾜足する場合は、以下コマンドでJVMのヒープを拡張する必要あり$  java  -­‐jar  -­‐Xmx1024m  kscope.jar• VMオプションによりロケールを指定可能（⽇日本語と英語を選択可）$  java  -­‐jar  -­‐Duser.language=en  kscope.jar

11インターフェース• 新規プロジェクト作成後の画⾯面例例• 画⾯面構成としては典型的なものを採⽤用  ⇒  直感的な操作が可能

ソースビュー

メニューバー

ステータスバー

エクスプローラビュー(structure  /  module  /  source  /  intermediate  code)

12

分析ビュー

静的プログラム解析  (1/2)• 実機による計測が必要ないため、⼩小さなコストで解析が⾏行行える。
• ⼀一般的なプロファイラでは、⼿手続き呼出しにフォーカスしてコールグラフを作成するのに対して、K-‐‑‒scopeではチューニングに必要なループ、分岐などの構造にフォーカスしてツリー可視化を⾏行行う（当然、⼿手続き呼出しもツリー表⽰示が可能）。
• 以下のツリーは姫野ベンチマークによる解析例例
エクスプローラビュー

ツリー要素に⽤用いられているアイコンの意味

Program  root

シーケンシャルな順番

プログラムの開始

プログラムの終了了

13

分岐if,  else,  where,  select,  case

ループ

do

プロシージャ呼出し（中間コードでパースされたもの）

中間コード作成時に呼出し先についてパースされているもの

プロシージャ呼出し（中間コードでパースされていないもの）

中間コード作成時に呼出し先についてパースされていないもの（MPI関数など）

静的プログラム解析  (2/2)• 姫野ベンチマークの  “jacobi”  サブルーチンのループを展開（左）• ツリー要素に対応する部分をソースビューに連動して表⽰示させることも可能（右）エクスプローラビュー

ソースビュー

14

ツリーのフィルタリング• K-‐‑‒scopeの構造情報は、Fortran構⽂文の粒粒度度で保持• 特定の構⽂文についてのみ表⽰示させるためのフィルタリング機能を提供
エクスプローラビュー

チェックボックスをオフにすることで、必要のない構⽂文をツリー上で⾮非表⽰示にすることが可能

15

動的プログラム解析• 実際のプログラムの挙動は実⾏行行時に決定される。
• 解析には実機またはエミュレータが必要• K-‐‑‒scopeでは京にフォーカスした動的プログラム解析を⽀支援• 富⼠士通製プロファイラ-‐‑‒

基本プロファイラ:  ﬁpp  (出⼒力力ファイル  DProf*)-‐‑‒

詳細プロファイラ:  fapp  (出⼒力力ファイル  EProf*)• 静的プログラム解析によって得られた情報と、プロファイラ情報を並べて表⽰示させることで、より正確なボトルネックが特定できる。
• その他の利利点-‐‑‒ プロファイル結果に⾏行行情報が含まれているため、中間コードがなくてもソースコードとの重畳は可能  ⇒  シンプルモード
16

基本プロファイラ  (1/2)• 基本プロファイラは⼿手続き・ループ・⾏行行単位の粒粒度度でのコスト情報を提供する。
分析ビュー

ソースビュー

ソースビュー分析ビュー

17

基本プロファイラ  (2/2)• メニューバーから  「プロファイラ」  >  「プロファイル結果の読込」  を選択
• ソースビューの右側にバーとルーラが表⽰示される。
コストバー
コストの値をソースビューの⾏行行に対応づけて表⽰示する。

コストルーラルーラはソースコード全体を俯瞰的に表⽰示している。コスト値が存在するところが⾊色付きの範囲により可視化される。マウスで選択することで該当する箇所がソースビューに表⽰示される。

詳細プロファイラの読込にも対応
18

最近の開発状況(1/2)
•

課題
-‐‑‒

K-‐‑‒scopeは新規プロジェクト作成時に、中間コードを⽤用意する必要がある。

-‐‑‒

中間コード作成のためにF_̲Front  等の環境を各ユーザが⽤用意する必要がある。

-‐‑‒Omni  XcalableMPのインストールに慣れていないと煩雑な作業-‐‑‒

ユーザビリティの改善が⽬目下の課題

フルモード１(既存の中間コードを読み込む)
ユーザが予め中間コードに変換しておく

K-‐‑‒scopeがローカルにインストールされた  atool  をキックする

K-‐‑‒scopeはまったく関知しない*.f90

フルモード２（ビルドコマンドを⽤用いてソースコードから中間コードを⽣生成する。）
それでも  atool/F_̲Front  をインストールする⼿手間は変わらない

*.xml

*.f90

K-scopeatool / F̲FrontK-scope

19

*.xml

最近の開発状況(2/2)••

プロジェクト-‐‑‒2013年年5⽉月開始-‐‑‒

AICS利利⽤用⾼高度度化研究チームと、チューニング作業⽀支援システムの構築に関する連携-‐‑‒K-‐‑‒scopeのユーザビリティの改善を検討

⾻骨⼦子
-‐‑‒

まずは  K-‐‑‒scopeを利利⽤用する⽴立立場で、Omni  XcalableMP  の導⼊入の⼿手間を軽減したい。

-‐‑‒

現状、京のフロントエンドに  F_̲Front  がインストールされている。

-‐‑‒atool  も試験的に導⼊入されている。

-‐‑‒K-‐‑‒scopeからリモートにインストールされている  atool/F_̲Front  を活⽤用することで、⼿手元のPCにインストールする⼿手間を省省く（フルモード2の拡張）。

-‐‑‒SSHを⽤用いたローカル  ⇔  リモート間のファイル転送、リモートのコマンド実⾏行行機能をユーティリティ化（Peter  Bryzgalov研究員が開発）
20

SSHconnect  の機能概要(1)  プレースホルダの置き換え(4)  中間コードのダウンロード

RewriteK-scope*.f90

makefileatool / F̲Front*.xml

K-scope*.f90

makefile

local  PC

K-scope

*.xml

*.f90

UploadArchive

SSH Server

SSHconnect

remote  server(2)  アーカイブ  ＋  アップロード
*.tar

Dow
nload

SSH Server

SSHconnect

*.f90

*.xml

(5)  K-‐‑‒scopeによるロード

atool / F̲Front*.f90

makefile

SSH Server

SSHconnect

*.tar

*.f90

Input

K-scope(3)  展開  ＋  中間コードへの変換*.xml*.tarK-scope

SSHconnect*.xml

tExtracbuild command*.f90

makefile*.f90*.f90

atool / F̲Front*.xml*.f90

makefile

SSH Server*.xml

Transform

21

SSHconnect

SSH Server*.xml

まとめ• Omni  XcalableMPの中間コードを利利⽤用したFortranコード分析ツールを開発した。
• K-‐‑‒scopeは、チューニングのワークフローにおいて、Preliminaryで使⽤用されることを想定したツールである。
• ソースコードリーディングおよびホットスポットのスクリーニング
が  K-‐‑‒scope  の真⾻骨頂• ユーザビリティの改善として、リモートサーバで中間コードを作成する機能を追加した。
• 京のフロントエンドをターゲットとした利利⽤用整備は進⾏行行中• Version  0.2.4  を  2013年年10⽉月31⽇日  にリリース
22

ご清聴有難うございました。
以下のURLからソースコード、実⾏行行モジュール、ドキュメントがダウンロードできます。
http://www.aics.riken.jp/ungi/soft/kscope/
質問、アナウンス⽤用のメーリングリストも⽤用意してあります。もしご興味ありましたら、登録する名前、所属、メールアドレスの情報とともに下記のメールアドレスにご連絡ください。
kscope-­‐admin@riken.jp• full  name• aﬃliation• e-­‐mail  address
23