テーマ2
テーマ2
ソフトウェア工学としての展開
ソフトウェア工学としての展開
ソフトウェア工学としての展開
ソフトウェア工学としての展開
研究代表者 片桐孝洋
東京大学情報基盤センター
東京大学情報基盤センタ
文部科学省 科学研究費補助金
基盤研究
(B)
文部科学省 科学研究費補助金
基盤研究
(B)
「メニーコア・超並列時代に向けた
自動チューニング記述言語の方式開発」
2009年度~2011年度
1 日時: 2009年10月22日(木)10:00~18:00 場所: 東京大学 弥生講堂アネックス セイホクギャラリー 10:30-10:45ソフトウェア性能工学の必要性
ソフトウェア性能工学の必要性
IT企業の重役にむけた調査[1]
IT企業の重役にむけた調査[1]
:
半数が製品の性能問題に直面
半数が製品の性能問題に直面
半数が製品の性能問題に直面
半数が製品の性能問題に直面
少なくとも
少なくとも
20%
20%は再開発
は再開発
再開発:遅延・コスト増加・開発失敗のリスク
性能を考慮したソフトウェア工学体系が必要
性能を考慮したソフトウェア工学体系が必要
ソフトウェア性能工学
(Software Performance Engineering, SPE)
[2]
(
g
g
)
[ ]
◦
定義:
ソフトウェア工学の全般、および、
ソフトウェア開発サイクルを通して直面する
ソフトウェア開発サイクルを通して直面する
性能要求に見合う解析
の工学体系
[1] Compuware, Applied Performance Management Survey, Oct. 2006.
2
[1] Compuware, Applied Performance Management Survey, Oct. 2006. [2] C. U. Smith, L. G. Williams: Software Performance Engineering:
A Case Study Including Performance Comparison with Design Alternatives,
ソフトウェア自動チューニング
工学の全体像
do i=1, n do j=1, n do k=1, n C( i, j ) = C( i, j ) + A( i, k ) * B( k, j ) enddo enddo do i=1, n, 2 do j=1, n do k=1, n C( i j ) C( i j ) A( i k ) * B( k j ) do i=1, n, 2 do j=1 nコード生成
工学の全体像
enddoenddo C( i, j ) = C( i, j ) + A( i, k ) * B( k, j )C( i+1, j ) = C( i+1, j ) + A( i+1, k ) * B( k, j )
enddo enddo enddo do j=1, n Ctmp1 = C( i, j ) Ctmp2 = C( i+1, j ) do k=1, n Btmp = B( k, j ) Ctmp1 = Ctmp1 + A( i, k ) * Btmp Ctmp2 = Ctmp2 + A( i+1, k ) * Btmp enddo do i=1, n, 2 do j=1, n Ctmp1 = C( i, j ) Ctmp2 = C( i+1, j ) do k=1, n, 2 Btmp1 = B( k, j )
コンパイルと実行
コンパイルと実行
enddo C( i, j ) = Ctmp1 C( i+1, j ) = Ctmp2 enddo enddo Btmp2 = B( k+1, j ) Ctmp1 = Ctmp1 + A( i, k ) * Btmp1 + A( i, k+1) * Btmp2 Ctmp2 = Ctmp2 + A( i+1, k ) * Btmp1 + A( i+1, k+1) * Btmp2 enddo C( i, j )=Ctmp13. 最適化フェーズ
イル
実行
イル
実行
C( i+1, j )=Ctmp2 enddo enddo実行結果の解析
実行結果の解析
2. プログラミング
フェーズ
4. データベース化
フェーズ
!ABCLib$ install unroll (i,k) region start !ABCLib$ name MyMatMul
!ABCLib$ varied (i,k) from 1 to 8 do i=1 n
とチューニング
知識探索
フェーズ
do i=1, n do j=1, n do k=1, n C( i, j ) = C( i, j ) + A( i, k ) * B( k, j ) enddo enddo enddo!ABCLib$ install unroll (i k) region end
フ
ズ
対象計算機
対象計算機
1. 仕様策定フェーズ
!ABCLib$ install unroll (i,k) region end
チューニング知識
チューニング知識
データベース
データベース
対象計算機
対象計算機
計算機環境の変化
計算機環境の変化
マルチコアの浸透
◦
非均質メモリアクセス
(
ccNUMA
)
◦
非均質メモリアクセス
(
ccNUMA
)
◦
多階層化されたキャッシュ構造
L1 L2は局所 L3は共有
L1、L2は局所、L3は共有
◦
チップ内のコア数の増大
ハイエンド:
32コア~、ローエンド:8コア~
並列実行モデルの変化
実行
デ
変
◦
ピュア
MPI実行
低~中並列実行(~
低
中並列実行(
1 000コア)時
1,000コア)時
◦
ハイブリッド
MPI
(
OpenMP + MPI)実行
超並列実行(
10 000+コア実行)時
超並列実行(
10,000+コア実行)時
マルチコアでの実行形態の違いによる
マルチコアでの実行形態の違いによる
性能挙動の劇的変化例
性能挙動の劇的変化例
(
(
T2K
T2Kオ プンスパコン)
オ
プンスパコン)
性能挙動の劇的変化例
性能挙動の劇的変化例
(
(
T2K
T2Kオープンスパコン)
オープンスパコン)
対称固有値ソルバの三重対角化(行列更新部分)
称固有値
角 (行 更新部分)
44コア実行(
コア実行(
44コア/ソケット)
コア/ソケット)
44コア実行(1コア/ソケット)
コア実行(1コア/ソケット)
高性能な
高性能な
段数
アンローリング
段数
行列サイズ
アンローリング
数
行列サイズ
高性能
段数
段数
共有L3キャッシ
の容量の影響
段数
7共有L3キャッシュの容量の影響
→
→(動的な)割当場所により最適実装が変わる!
(動的な)割当場所により最適実装が変わる!
並列実行でのアルゴリズム切替例
並列実行でのアルゴリズム切替例
連立一次方程式解法:疎行列反復解法(
GMRES法)
フロリダ行列epb3、T2Kオープンスパコン(東大版)
古典
古典
G
G--S
S
修正
修正
G
G--S
S(デフォルト)
(デフォルト)
Cores Iter. Orth. Time 16 24991 89.1 103.0 32 22988 36.3 44.5
Iter. Orth. Time
24499 68.6 81.0 24924 70.5 76.9 32 22988 36.3 44.5 48 25619 22.6 28.4 64 25412 12.3 16.6 24924 70.5 76.9 25885 64.2 68.7 24710 95.4 99.4 80 23514 8.2 11.4 96 24577 7.5 10.9 112 23808 6.3 10.2 27285 102.7 106.4 23850 90.8 94.4 23987 85 4 88 7 112 23808 6.3 10.2 128 24383 7.7 12.0
Iter. 収束までの反復回数
23987 85.4 88.7 23921 129.5 134.0
128
128コアで
コアで
10
10倍以上
倍以上
収束ま
反復回数
Orth. 直交化の時間(秒)
Time 全計算時間(秒)
128
128コアで
コアで
10
10倍以上
倍以上
の時間差
の時間差
AT専用言語による
AT専用言語による
自動チューニングソフトウェア開発手順
自動チューニングソフトウェア開発手順
自動チュ
ニングソフトウェア開発手順
自動チュ
ニングソフトウェア開発手順
ソフトウエア
開発者
ソフトウエア開発者が記述
計算機環境に依存しない
開発者
ABCLibScriptによる
!ABCLib$ install unroll region start
!ABCLib$
i d (i j k) f
1 t
8
計算機環境に依存しない
ABCLibScriptによる
自動チューニング記述
!ABCLib$ varied (i,j,k) from 1 to 8
do i=1, N
do j=1, N
do k 1
N
専用言語処理系
(プリプロセッサ)の起動
do k=1, N
C(i, j) = C(i, j) + A(i, k) * B(k, j)
enddo; enddo; enddo;
!ABCLib$ install unroll region end
自動チューニング機能が
付加されたプログラム
コンパイラでは
できない
!ABCLib$ install unroll region end
■自動付加され
数値計算ライブラリ
(ソースコード)
できない
メニーコア・
超並列環境に
向く自動最適化
る機構
対象蓄積
モニタ
(ソースコード)
向く自動最適化
手法
タ
学習
パラメタ推定
本科研の目的
本科研の目的
新
新
ABCLibScript
ABCLibScript開発
開発
開発責任者:片桐(東大)
AT理論
複数候補の並列評価C言語用プリプロセッサ
マルチコア・超並列環境用
機能拡張
新
新
pp 開発
開発
須田(東大)
M1 M2 M3 M3 M3 M3 M3 M3 M3 M3 M3 M3 試行専用プロセッサによる並列試行機能拡張
並列実験計画法
3.0 V/m ×105電磁場解析等応用:
岩下(京大)
マルチコア制御基盤
今村(電通大)
10万コア向け
機能
M1 M1 M2 M3 M1 M1 M1 M1 M3 M3 M4 M5動的
割当
1.5•陰的マルチ
グリッド法
•FDTD法
岩下(京大)
疎行列
今村(電通大)
10万コア向け
固有値ソルバ要求機能
コミュニケータ分
割・動的コア割当機能
機能
拡張
動的コア割当
0.0 方形アイリス 結合円形導波管•FDTD法
疎行列
反復解法応用:
黒田(愛媛大)
ILIB GMRES
CPU切替基盤
滝沢(東北大)
SPRAT Code /* Special function running on CPU and GPU */ kernel map copy(in streamout stream<float<float> si,> so ) {so = si; }
int main(int argc,char** argv) {
stream<float> sa(N), sb(N);
float aa[N], ab[N]; /* read data from array */ streamRead(sa, aa); /* launch the kernel */ copy(sa,sb); /* write data to array */ streamWrite(sb,ab);
割
動的コア割当機能
応用
適用
結合円形導波管 フィルタ解析•ILIB_GMRES
動的
CPU切替
滝沢(東北大)
C++ Code for CPU CUDA Codefor GPUSPRAT Compiler C/C++ Compiler CompilerCUDA
Linker SPRAT Runtime (,); return 0; }
Runtime Processor Selection
適用
反復解法検証
伊藤(理研)
動的
CPU切替
Executable先進解法適用
114096コア(256ノード)以上の
マルチコア・超並列環境で有効性検証
品質管理
11将来展望:
将来展望:
組込み系へAT技術を適用
組込み系へAT技術を適用
組込み系へAT技術を適用
組込み系へAT技術を適用
T-Engine/SH775R開発ボード
シリアル
ポ
ト
ポート
自動
実装
実装
自動
生成
プログラム
開発用PC
実装
実装
実装
生成
開発用PC
実装
プログラム開発用PC
Cygwin
GNU開発環境(gcc)
開発環境(
g )
ABCLibScriptプリプロセッサ起動
自動チューニングコード自動生成
片桐孝洋:自動チューニング処理記述用言語 ABCLibScriptの組み込みシステムへの適用の一検討、 SWoPP2007、2007年8月2日、旭川市AT専用言語による
AT専用言語による
組込みソフトウ
ア開発手順
組込みソフトウ
ア開発手順
組込みソフトウェア開発手順
組込みソフトウェア開発手順
T-Engine/SH775R開発ボード
シリアル
シリアル
ポート
自動チューニング
プログラム
実装
実装
モード起動
速度を実測しながら
最適な実装を選択
プログラム
開発用PC
実装
実装
最適な実装を選択
USBディスクを
作業領域にできる
作業領域にできる
評価の自動化
13評価の自動化
実験ハードウエア環境
実験ハードウエア環境
ネサ
クノ ジ
T-Engine開発ボード仕様
CPU
ルネサンステクノロジ
SH7751R (SH-4コア、240MHz)
フラッシュメモリ
8Mバイト
SDRAM
64Mバイト
SDRAM
64Mバイト
作業用ディスク
USBストレージデバイス2Gバイト
実行プログラム
プロセスベ ス
実行プログラム
プロセスベース
CLI (Command Line Interpreter) 上で実行
実験プログラムはT-Engine/SH7751R開発キットの
標準環境でコンパイル
コンパイラは
gcc version 3.0.4、
最適化オプションは
-O2
対象ソフトウエア
対象ソフトウエア
1.
行列‐行列積
N 128
◦
N=128
◦
倍精度
倍精度
2.
組み込み用ベンチマーク
MiBench
における
FFT
における
FFT
◦
Telecomm 中にあるFFT/IFFT
Telecomm 中にあるFFT/IFFT
◦
N=8192
倍精度
◦
倍精度
行列-行列積における
行列-行列積における
ABCLibS
i
ABCLibS
i 指示子
指示子
ABCLibScsript
ABCLibScsript指示子
指示子
#
ABCLib i
ll
ll (i j)
i
#pragma ABCLib install unroll (i, j) region start
#pragma ABCLib varied (i, j) from 1 to 8 sampled 1,2,4,8
{
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
for (k=0; k<n; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
FFT / IFFT
FFT / IFFTにおける
における
ABCLibScript
ABCLibScript指示子
指示子
ABCLibScript
ABCLibScript指示子
指示子
f ( i 0 i < N S l i + Bl kSi ) {#pragma ABCLib install unroll (j)
region start
#pragma ABCLib varied (j) from 1 to 8
for ( i=0; i < NumSamples; i += BlockSize ) { ar[2] = cm2; ar[1] = cm1;
ai[2] = sm2; ai[1] = sm1;
for ( j=i, n=0; n < BlockEnd; j++, n++ ) {
#pragma ABCLib varied (j) from 1 to 8
sampled 1,2,4,8
BlockEnd = 1; for (BlockSize = 2;
( j , ; ; j , ) { ar[0] = w*ar[1] - ar[2];
ar[2] = ar[1]; ar[1] = ar[0]; ai[0] = w*ai[1] - ai[2];
i[2] i[1] i[1] i[0] for (BlockSize 2;
BlockSize <= NumSamples; BlockSize <<= 1 ) {
double delta_angle = angle_numerator /(d bl )Bl kSi
ai[2] = ai[1]; ai[1] = ai[0]; k = j + BlockEnd;
tr = ar[0]*RealOut[k] – ai[0]*ImagOut[k]; ti = ar[0]*ImagOut[k] + ai[0]*RealOut[k]; /(double)BlockSize;
double sm2 = sin ( -2 * delta_angle ); double sm1 = sin ( -delta_angle ); double cm2 = cos ( -2 * delta angle );
[ ] g [ ] [ ] [ ]; RealOut[k] = RealOut[j] – tr;
ImagOut[k] = ImagOut[j] - ti; RealOut[j] += tr; ImagOut[j] += ti; }
double cm2 cos ( 2 delta_angle ); double cm1 = cos ( -delta_angle ); double w = 2 * cm1;
double ar[3]; double ai[3];
} }
BlockEnd = BlockSize; }
17