21.2. バイトニックマージ

マージはバイトニック分割(Bitonic Split)を繰り返します。これはアルゴリズムの最後のステージにあたり、マージ終了後には整列済み配列ができます。

それではバイトニック分割の定義である不等式を再度確認してみましょう。

images/bitonic_comparison.png

この場合、nは16なので、インデックスiのペア【0,8】、【1,9】、【8,16】で不等式が成立する場合に値をスワップ(入れ替え)します。

一例として前の項目では図を用いて解説した要素16の場合を考えてみましょう。

バイトニック配列を構築はステージ2まで終了しているため、マージをして整列を完了するために新たなステージ3を追加します。

images/sorting-network-16-merge.png

ステージ3(図のstage3)では、4つのステップ(passと呼ぶのが一般的)が存在します。

ステップ0(pass0)
2つの配列をマージ、スワップする距離(distance)は8
ステップ1(pass1)
4つの配列をマージ、距離は4
ステップ2(pass2)
8つの配列をマージ、距離は2
ステップ3(pass3)
16の配列をマージ、距離は1、整列完了

これらのステップは「表:Bitonic Sort(Stage0からStage3まで)」(Table 21.3, “表:Bitonic Sort(Stage0からStage3まで)”)にまとめられています。

Table 21.3. 表:Bitonic Sort(Stage0からStage3まで)

インデックス
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
元シーケンス
3
7
24
11
78
66
12
8
34
65
43
29
96
41
1
10
stage0 pass0
3
7
24
11
66
78
12
8
34
65
43
29
41
96
10
1
stage1 pass0
3
7
24
11
66
78
12
8
43
65
34
29
10
1
41
96
stage1 pass1
3
7
11
24
78
66
12
8
65
43
34
29
1
10
41
96
stage2 pass0
3
7
11
8
78
66
12
24
65
43
41
96
1
10
34
29
stage2 pass1
3
7
11
8
12
24
78
66
65
96
41
43
34
29
1
10
stage2 pass2
3
7
8
11
12
24
66
78
96
65
43
41
34
29
10
1
stage3 pass0
3
7
8
11
12
24
10
1
96
65
43
41
34
29
66
78
stage3 pass1
3
7
8
1
12
24
10
11
34
29
43
41
96
65
66
78
stage3 pass2
3
1
8
7
10
11
12
24
34
29
43
41
66
65
96
78
stage3 pass3
1
3
7
8
10
11
12
24
29
34
41
43
65
66
78
96

stage2-pass1でバイトニック配列が完成したあとの、マージのステップを見る場合、分かりやすいのが一番左(インデックス15)の最小値である「1」が、最終的に一番左に移動していることに注目するとよいでしょう。

stage3-pass0
「1」がインデックス15からインデックス7に移動
stage3-pass1
「1」がインデックス7からインデックス3に移動
stage3-pass2
「1」がインデックス3からインデックス1に移動
stage3-pass2
「1」がインデックス1からインデックス0に移動

同様に最大値である「96」の移動を見ると、バイトニック分割によって徐々に整列されていくソートのプロセスが見えてくると思います。

ここまでバイトニック整列のアルゴリズムを解説しましたが、バイトニック整列は並列化アルゴリズムということで、標準的な教本にない事があるために、冗長ながらもステップ毎に解説してみました。いかがでしたでしょうか?

理解できない場合や誤りがある場合は、筆者にメールでお伝え頂けると助かります。

Copyright 2018-2019, by Masaki Komatsu