各レベルでの使用例を見てみる
1つの命令で複数の変数(レジスタ等)に
機械語命令レベル
対して演算を行う。
1つのプログラム(プロセス)が複数の
CPU core レベル
CPU コアを同時に使用する。
1つのマシン上で複数のプロセスを
プロセスレベル
動作させる。
1つのクラスター上で複数のノードを
ノードレベル
動作させる。
地理的に離れたサイトにある複数の
世界レベル
マシンを協調させて計算に使う。
13.
CPU core レベル
物理CPU 物理CPU
CPU core CPU core CPU core CPU core
CPU core CPU core CPU core CPU core
• 複数のCPUでアラインメント
– bwa [Li & Durbin ‘09]
– Bowtie [Langmead et al ‘
• 複数のCPUでゲノムアセンブリ
– Velvet [Zerbino & Berney ‘08]
– ABySS [Simpson et al ‘09] (複数ノードの)
– Ray [Boisvert ‘10]
– ALLPATHS-LG [Gnerre et al ‘10]
• 複数のCPUでSNV発見
– The Genome Analysis Toolkit [McKenna et al ‘10]
– Unified Genotyper [DePristo et al ‘10]
14.
各レベルでの使用例を見てみる
1つの命令で複数の変数(レジスタ等)に
機械語命令レベル
対して演算を行う。
1つのプログラム(プロセス)が複数の
CPU core レベル
CPU コアを同時に使用する。
1つのマシン上で複数のプロセスを
プロセスレベル
動作させる。
1つのクラスター上で複数のノードを
ノードレベル
動作させる。
地理的に離れたサイトにある複数の
世界レベル
マシンを協調させて計算に使う。
15.
プロセスレベル並列
ノード ノード
プロセス1 プロセス3 プロセス5 プロセス6
プロセス2 プロセス4 プロセス7 プロセス8
ノードをまたぐことも。
• 並列でベースコール
– AltaCyclic [Erlich et al ’08]
• 並列でワークフロー
– 特定の論文というわけではないが・・・
• Sun Grid Engine (SGE, N1GE, OGE)/ Load Sharing Facility (LSF)/ Condor など
を用いてソフトを繋ぐ方法はよく用いられる。
• 並列で SNV 発見
– Unified Genotyper [DePristo et al ‘10]
プロセスレベル並列は未だ開発中。
16.
各レベルでの使用例を見てみる
1つの命令で複数の変数(レジスタ等)に
機械語命令レベル
対して演算を行う。
1つのプログラム(プロセス)が複数の
CPU core レベル
CPU コアを同時に使用する。
1つのマシン上で複数のプロセスを
プロセスレベル
動作させる。
1つのクラスター上で複数のノードを
ノードレベル
動作させる。
地理的に離れたサイトにある複数の
世界レベル
マシンを協調させて計算に使う。
17.
ノードレベル並列
ノード ノード ノード
プロセス プロセス プロセス プロセス プロセス プロセス
プロセス プロセス プロセス プロセス プロセス プロセス
プロセスレベル並列では、各プロセスが異なるプログラムあるいは異なる
データを処理するのに対して、ノードレベル並列は「1つのアプリケーション」
が複数のノードを活用すること。
• 複数のノードでゲノムアセンブリ
– ABySS [Simpson et al ‘09]
– Ray [Boisvert ‘10]
• 複数のノードでアラインメント
– MPI-BLAST [Thorsen et al ‘07]
• 複数のCPUで構造計算
– GAMESS/DDI [Olson et al ’03 など]
• 複数のノードでタンパク質構造計算
– MARBLE, ProteinDF, etc.
18.
各レベルでの使用例を見てみる
1つの命令で複数の変数(レジスタ等)に
機械語命令レベル
対して演算を行う。
1つのプログラム(プロセス)が複数の
CPU core レベル
CPU コアを同時に使用する。
1つのマシン上で複数のプロセスを
プロセスレベル
動作させる。
1つのクラスター上で複数のノードを
ノードレベル
動作させる。
地理的に離れたサイトにある複数の
世界レベル
マシンを協調させて計算に使う。
MapReduce
• Map 関数とReduce 関数を定義すればそれだけ
で並列処理が行えるフレームワーク
ユーザー定義
入力データ
入力1 入力2 入力3 ・・・・・ 入力N
map map map map map
k, v k, v k, v k, v
k, v k, v k, v ・・・・・ k, v
k, v k, v k, v k, v
shuffle
(k ごとにまとめる)
v, v, v, v v, v, v v, v, v, v, v, v, v, v v ・・・・・ v, v
reduce reduce reduce reduce reduce reduce
出力データ
34.
MapReduce の例
• 問題
– 数兆単語を含むテキストファイルで、単語の出現頻度を
カウントする。
void map(list<String> words):
for word in words:
emit(word, 1)
list<int> reduce(string word, list<int> freq):
sum := 0
for f in freq:
sum += f
return list<int>(sum) // sum 1要素からなるリストを返す
OSDI'04: Sixth Symposium on Operating System Design and
Implementation, San Francisco, CA, December, 2004
35.
MapReduce の例
• 問題
– 数億 web ページについて、各ページからリンクしている URL のリスト
が与えられている
– すべての web ページについて、そのページにリンクしている web
ページの URL リストを求める
void map(list<URL, URL> links):
for link in links:
emit(link.toURL, link.fromURL)
list<URL> reduce(URL base, list<URL> linkingPages):
return linkingPages
OSDI'04: Sixth Symposium on Operating System Design and
Implementation, San Francisco, CA, December, 2004
36.
MapReduce の例
• 問題
– 数十億本の short read について、bwa でヒトゲノムにアラインメント
した結果を返す
void map(list<Read> shortReads):
for read in shortReads: // 実際にはある程度まとめてバッチで処理
bwaを起動してアラインメント
emit(アラインした染色体名, 結果)
list<Alignment> reduce(string chromName, list<Alignment> result):
return result
OSDI'04: Sixth Symposium on Operating System Design and
Implementation, San Francisco, CA, December, 2004