12. 各レベルでの使用例を見てみる
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つのクラスター上で複数のノードを
ノードレベル
動作させる。
地理的に離れたサイトにある複数の
世界レベル
マシンを協調させて計算に使う。
33. 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