（様式 20）成果報告書

TSUBAME 共同利用 平成２８年度 学術利用 成果報告書

利用課題名 先進的ステンシルコード技術
英文：Advance Stencil-Code Engineering
利用課題責任者
千葉 滋
Shigeru Chiba所属
東京大学 情報理工学系研究科創造情報学専攻
Grad. School of Information Science and Technology
The University of Tokyo
http://www.csg.ci.i.u-tokyo.ac.jp
邦文抄録（300 字程度）
⾼度なステンシル計算のためのドメイン専⽤⾔語 (DSL) の開発を⾏い、その実⾏時性能を TSUBAME上で検証するとともに性能改善をおこなった。本研究課題は JST CREST/独 DFG による⽇独共同研究
SPPEXA のフレームワークの中で実施している。本研究課題では、埋め込み型ドメイン専⽤⾔語を開発するための⼿法として我々が研究している deep reification と呼ぶ⼿法の評価を TSUBAME 上でおこなった。実験にあたり deep reification を Java ⾔語で可能にするように我々が開発した Bytespresso を⽤いた。
英文抄録（100 words 程度）
We have developed a domain specific language (DSL) for high-performance stencil computing andexamined and improved its execution performance on TSUBAME. This work was performed under theframework of the joint research program SPPEXA of JST CREST and German DFG. This work
evaluated our technique called deep reification for developing an embedded domain-specific language.
For our experiment, we used Bytespresso, which is our software that enables deep reification in Java.

Keywords: domain specific languages, reflection, deep reification, stencil computing, Java.

背景と目的＋アプリケーションの開発コストの和

ステンシル計算は多くの科学技術分野で頻繁に使われる計算でこれまでも様々なドメイン専⽤⾔語やであり、アプリケーションプログラムの開発コストライブラリが開発されてきた。⼀⽅で、ドメイン専はドメイン専⽤⾔語を⽤いることで低減することが⽤⾔語はせまい応⽤範囲（ドメイン）のために新規期待されるが、低減された開発コストがドメイン専にコンパイラやライブラリ、開発環境を整備しなけ⽤⾔語の開発コストを上回っていなければならない。

ればならず、開発コストの⼤きさが課題である。多このため、より応⽤範囲の広いドメイン専⽤⾔語を数のアプリケーションプログラムが⾒込めるドメイ開発することになるが、応⽤範囲を広く取れば取るンであれば⼤きな開発コストをかけてドメイン専⽤ほどその⾔語は汎⽤⾔語に近づいていき、ドメイン⾔語を開発しても⾒合うが、少数のアプリケーショ専⽤⾔語の利点を活かしにくくなる。つまりそのドンプログラムしか⾒込めないドメインの場合、ドメメインのプログラマから⾒て⾃然な抽象機構の提供イン専⽤⾔語の開発コストが⾒合わないことがある。

や、そのドメイン特有の知⾒を⽣かした実⾏の最適化などの利点である。

開発コストの総和＝ドメイン専⽤⾔語の開発コスト

ドメイン専⽤⾔語の開発コストという課題を解消する⼿法として注⽬されているのが埋め込み型ドメ（様式 20）成果報告書
イ ン 専 ⽤ ⾔ 語 （ Embedded Domain Specific

TSUBAME 上で検証するとともに性能改善をおこLanguages）と呼ばれる⼿法である。この⼿法では、なった。ステンシル計算の利⽤者にとってなじみやドメイン専⽤⾔語は汎⽤プログラミング⾔語（ホスすい⾏列表現など抽象度の⾼い記述によるプログラト⾔語とよぶ）のライブラリとして実装される。ラムを、計算機に近い表現で記述されたプログラムにイブラリではあるが、そのライブラリを⽤いた書か匹敵する速度で実⾏可能にすることを⽬指す。本研れたホスト⾔語のプログラムが、あたかも専⽤の⾔究課題は JST CREST/独 DFG による⽇独共同研語で書かれたかのように⾒えるよう、ライブラリの究 SPPEXA のフレームワークの中で実施している。

プログラミング・インタフェースを注意深く設計す

このフレームワークでは、ステンシル計算のためのる。プログラミング・インタフェースの⾃由度は、外部 DSL と内部 DSL を開発している。主に外部そのホスト⾔語の構⽂の範囲内に制限されるが、近DSL では記述能⼒と性能を、内部 DSL では利⽤の年登場した新しい汎⽤プログラミング⾔語は構⽂の容易さを追求する⼀⽅、それぞれが苦⼿する部分の⾃由度が⾼く、そのようなライブラリの設計が可能改善をおこなう。TSUBAME を⽤いることで、⽇本になってきた。

最⼤級の GPU 搭載スーパーコンピュータで実⽤的埋め込み型ドメイン専⽤⾔語は、ホスト⾔語のライブラリであるが故に、開発コストが⽐較的⼩さくな性能を達成する DSL の実現⼿法の研究をおこなう。

できるが、実⾏時性能は必ずしも満⾜いくものでは本研究課題では、埋め込み型ドメイン専⽤⾔語をなかった。そのドメイン固有の実⾏時性能最適化技開発するための⼿法として我々が研究している法などの適⽤が難しくなりがちだからである。汎⽤

deep reification と呼ぶ⼿法の評価を TSUBAME 上⾔語では、プログラムがどのように書かれていても、でおこなった。実⾏時性能の⾼いドメイン専⽤⾔語

⾔語仕様に定められたとおりの計算をおこなわなけを実現するには、プログラムを抽象構⽂⽊ないしはればならない。このため適⽤できる最適化に制限がより低レベルな中間表現に変換し、それを⽤いてよ加わりがちである。

り⾼速実⾏できる形に変換することが必要である。

本研究課題は、最新のプログラミング⾔語の技術

埋め込みドメイン専⽤⾔語でもこれを可能にするたを適⽤することで、⾼い実⾏時性能をもつ埋め込みめ、deep embedding のような技術が開発されてき型ドメイン専⽤⾔語の開発⼿法を明らかにすることたが、プログラマの視点からは⾃然な形のプログラを狙っている。ドメイン専⽤⾔語には、ドメインのムになりにくいという⽋点があった。これを補う⼿プログラマから⾒て⾃然な抽象機構を提供する利点

法 LMS も提案されているが、Scala ⾔語のような⾼と、ドメイン知識を⽤いた⾼速実⾏を可能にする利度な型システムを持った⾔語でなければ利⽤できな点があり、従来技法では前者を達成していたものの、い。Deep reification は実⾏中にラムダ式などの形で後者の利点が不⼗分だった。本研究課題では、埋め与えられたプログラムの断⽚に対して、対応する構込み型ドメイン専⽤⾔語で両⽅の利点を⽣かせるよ

⽂⽊を返す reflection 機構を⽤意し、それを⽤いてうにすることを狙い、ホスト⾔語に Java ⾔語を⽤い、埋め込み型ドメイン専⽤⾔語を実現しようというア

対象ドメインとしてステンシル計算を例として研究

イデアである。Lisp 系の⾔語に⾒られるマクロ機構をおこない、⼿書きの C ⾔語プログラムに匹敵するによく似ているが、そのプログラムの断⽚の中で呼性能を達成できることを⽰した。

ばれている関数、メソッドについても構⽂⽊を芋づる式に取り出せる点が異なる。

我 々 は deep reification を 備 え た 処 理 系
概要

Bytespresso を Java ⾔語をホスト⾔語として実装

⾼度なステンシル計算のためのドメイン専⽤⾔語した。Bytespresso も Java ⾔語で書かれたライブ(DSL) の 開 発 を ⾏ い 、 そ の 実 ⾏ 時 性 能 をラリであり、Reifier クラスを提供する。このクラ（様式 20）成果報告書
スの snap メソッドを下のように呼ぶと、引数 cmで渡されたメソッド・オブジェクトを与えられた結果および考察引数 args の下で実⾏した場合の抽象構⽂⽊が返Bytespresso で実装したドメイン専⽤⾔語の実⾏される。

時性能を評価するために、上述のステンシル計算

CtMethod cm = ...

⽤の⾔語を TSUBAME 上で実⾏した。ベンチマ

Object[] args = { ... };ークプログラムとして Himeno ベンチマークの問

Reifier reifier = new Reifier(cm, args);

題サイズ XL (512x512x1024)を⽤いた。我々はこReifier.Snapshot image = reifier.snap();のベンチマークプログラムを我々のステンシル

変数 image は、snap が取り出した抽象構⽂⽊の他計算⾔語に移植し、⽐較には C ⾔語で書かれた元に内部で使われている型や、そこから参照されてのベンチ−マークプログラムを⽤いた。それぞれいるオブジェクトを保持する。抽象構⽂⽊はそのの MPI ノードはシングルスレッドで単精度計算中から呼ばれている他のメソッドの抽象構⽂⽊を⾏った。コンパイルには Intel C compiler をを含むので実際には⽊ではなく森となる。

-Ofast オプションを付けて⽤い、MPI 環境には

Bytespresso は抽象構⽂⽊の取り出しにあたってOpenMPI 1.8.2 を⽤いた。最⼤で 256 ノードをJava バイトコードを逆コンパイルして抽象構⽂⽤いた。

⽊を作成する。したがってソースコードがなくとも抽象構⽂⽊を取り出すことができる。

実 ⾏ 結 果 を 図 １ （ Shigeru Chiba, YungYu
Zhuang, Maximilian Scherr, “Deeply reifying

Bytespresso を⽤いた埋め込み型ドメイン専⽤

running code for constructing a domain-specific

⾔語として、ステンシル計算をおこなう簡単なドlanguage”, PPPJʼ16, ACM 2016 より引⽤）に⽰

メイン専⽤⾔語を開発した。この⾔語は Java をホす。図の横軸は MPI プロセス数を表す。8x8x4 のよ

スト⾔語とし、次のようなプログラムを書くこと

うな注釈は３次元のグリッドの分割数を表す。図がができる。

⽰すように Bytespresso が Java プログラムから⽣成する C ⾔語プログラムの実⾏速度は⾮常によい。元

grid.initialize(cInitPressure).each(Reduction.SUM, 1, Predicate.FOREVER,の C ⾔語プログラムよりも⾼速なのは、Bytespressoが採⽤している配列のメモリ配置が本ベンチマークの計算により適していたためと思われる。

new Kernel() {public float newValue(FloatArray3D p,3.5

Cursor cur, int t, Reduction r) {3.0+ 略
float ss = 略r.apply(ss * ss);
return cur.self(p) + omega * ss;}}).repeat(N, drv);

書かれたプログラムは C ⾔語プログラムへと変換され、MPI 環境で実⾏できる。ドメイン専⽤⾔Measured performance in TFlops

float s0 = cur.self(a0) * cur.east(p)16x16x8

2.5

2.0

16x16x16

16x8x81.5

8x8x8
Bytespresso-C

1.0

8x8x4
8x4x4
4x4x4

0.5

Origianl C

0.00500

1000

1500

2000

2500

3000

3500

4000

4500

The number of processes

語であるので、MPI 環境での実装の詳細はプログ

図 1. Strong scale performance of the Jacobi

ラマからは隠されている。

kernel of Himeno on TSUBAME2.5.

（様式 20）成果報告書

まとめ、今後の課題
本 研 究 課 題 で は 、 我 々 が 研 究 開 発 し た deepreification の実効性を確かめるため、TSUBAME を⽤いた性能測定をおこなった。Java ⾔語プログラムの中で deep reification を可能にするシステムとして Bytespresso を開発し、簡単なステンシル計算⽤のドメイン専⽤⾔語を作成し、実⾏速度を測定した。
その結果、⼈⼿で書いたプログラムに遜⾊ない実⾏速度が達成できることを⽰した。
今後の課題はドイツ側の共同研究者が開発している外部ドメイン専⽤⾔語である ExaSlang を deepreification を⽤いて埋め込み型ドメイン専⽤⾔語に移植することである。移植したものの実⾏時性能を元の ExaSlang の実⾏速度と⽐較し、より実⽤的な状況での deep reification の効果を議論する。