半導体不良ビット高速グループ化
1.概要
◆2次元平面上の2点p,qの距離Dがd未満である点を1つのグループにまとめる。
※半導体の不良ビットを距離の閾値によってグループ化するときなどに応用可能。
◆距離によるビットのグループ化は、素朴な方法ではビット数N個に対して
N×(N−1)/2 回
の距離の計算が必要となる。
◆本プログラムでは、ほぼビット数Nに比例した時間でグループ化出来る。
2点の座標をそれぞれ(x1,y1),(x2,y2)としたときの距離dは
dx = |x1−x2|
dy = |y1−y2|
距離d = max{dx,dy}
距離dと閾値Dが、d < D のときに2つの点は同じグループに入れる。
※半導体の不良ビットを距離の閾値によってグループ化するときなどに応用可能。
◆距離によるビットのグループ化は、素朴な方法ではビット数N個に対して
N×(N−1)/2 回
の距離の計算が必要となる。
◆本プログラムでは、ほぼビット数Nに比例した時間でグループ化出来る。
2点の座標をそれぞれ(x1,y1),(x2,y2)としたときの距離dは
dx = |x1−x2|
dy = |y1−y2|
距離d = max{dx,dy}
距離dと閾値Dが、d < D のときに2つの点は同じグループに入れる。
2.近隣点のグルーピングのアルゴリズムの概要
辺の長さがdの正方形のメッシュをつくり、メッシュと点の関係を作る。
・メッシュ内の点同士は距離がd未満なので同じグループに属する。
・8方向の隣接メッシュ内の点について距離を調べる。
隣接しないメッシュ間ではどのペアも距離がd以上となるので調べる必要はない。
グループを統合するアルゴリズム
・2つの集合の統合にははユニオンファインド木を用いる。
・マージの手間は点の数にほぼ無関係で定数時間である。
詳細はソースファイルgrouping_memo.hを参照してください
・メッシュ内の点同士は距離がd未満なので同じグループに属する。
・8方向の隣接メッシュ内の点について距離を調べる。
隣接しないメッシュ間ではどのペアも距離がd以上となるので調べる必要はない。
グループを統合するアルゴリズム
・2つの集合の統合にははユニオンファインド木を用いる。
・マージの手間は点の数にほぼ無関係で定数時間である。
詳細はソースファイルgrouping_memo.hを参照してください
3.使用方法
◆ダウンロード(ダウンロードのページからもダウンロードできます)
sample02.zip 920 KB (942,948 バイト) ソース付き
3.1 インストール
(1)ダウンロードしたファイルを、任意のディレクトリに解凍します。
sample02フォルダの内容
(a)使用許諾契約書.txt
(b)仕様書.xls
(c)group_bit.exe
(d)group_bit_dll.dll
(e)idata.txt
3.2 アンインストール
(1)インストール時に作成したディレクトリごとファイルを削除します。
3.3 使用方法
(1)DOSプロンプト画面を表示します。
(2)インストールディレクトリ/sample02に移動します。
(3)入力データファイルを準備します。
(a)idata.txt
(4)プログラム実行。
groupBit.exe
(5)出力データファイルを確認します。
(a)odata.txt
(b)error.log
sample02.zip 920 KB (942,948 バイト) ソース付き
3.1 インストール
(1)ダウンロードしたファイルを、任意のディレクトリに解凍します。
sample02フォルダの内容
(a)使用許諾契約書.txt
(b)仕様書.xls
(c)group_bit.exe
(d)group_bit_dll.dll
(e)idata.txt
3.2 アンインストール
(1)インストール時に作成したディレクトリごとファイルを削除します。
3.3 使用方法
(1)DOSプロンプト画面を表示します。
(2)インストールディレクトリ/sample02に移動します。
(3)入力データファイルを準備します。
(a)idata.txt
(4)プログラム実行。
groupBit.exe
(5)出力データファイルを確認します。
(a)odata.txt
(b)error.log
4.性能
◆テスト結果(処理回数=ビット数分の処理を繰り返した回数)
※テストデータでは、閾値20で全てのビットが1つにグループ化する。
◆検証
(1)ほぼビット数に比例した処理時間となる。(ビット数Nの2乗ではない)
(2)閾値が大きくなるとさらに高速になる。
◆テスト環境
OS:Microsoft Windows XP Proffesional
CPU:Pentium4 3GHz(HT)
メモリ:2GB
Xサイズ | Yサイズ | 閾値 | ビット数 | 処理回数 | 合計時間 | 時間/回 | グループ数 |
4096 | 4096 | 2 | 10000 | 100 | 1.8 | 0.018 | 4588 |
4096 | 4096 | 2 | 100000 | 10 | 1.9 | 0.19 | 44341 |
4096 | 4096 | 2 | 1000000 | 1 | 0.9 | 0.9 | 441159 |
4096 | 4096 | 5 | 10000 | 100 | 1 | 0.01 | 42 |
4096 | 4096 | 5 | 100000 | 10 | 0.6 | 0.06 | 142 |
4096 | 4096 | 5 | 1000000 | 1 | 0.8 | 0.8 | 142 |
4096 | 4096 | 20 | 10000 | 100 | 0.2 | 0.002 | 1 |
4096 | 4096 | 20 | 100000 | 10 | 0.2 | 0.02 | 1 |
4096 | 4096 | 20 | 1000000 | 1 | 0.2 | 0.2 | 1 |
◆検証
(1)ほぼビット数に比例した処理時間となる。(ビット数Nの2乗ではない)
(2)閾値が大きくなるとさらに高速になる。
◆テスト環境
OS:Microsoft Windows XP Proffesional
CPU:Pentium4 3GHz(HT)
メモリ:2GB
5.開発環境
Visual Studio 2005 C++