• 沒有找到結果。

BDD最小化問題之改良演算法

N/A
N/A
Protected

Academic year: 2021

Share "BDD最小化問題之改良演算法"

Copied!
12
0
0

加載中.... (立即查看全文)

全文

(1)BDD 最小化問題之改良演算法 魏君任 國立台灣師大資訊教育研究所 台北市和平東路一段 162 號 cjwei@ice.ntnu.edu.tw. 林順喜 國立台灣師大資訊工程研究所 台北市汀州路四段八十八號 linss@csie.ntnu.edu.tw. 摘要 若將一個布林函數的 n 個變數依 Shannon 分解展開,轉換成 BDD,那麼會得到一個完 整二元樹,如圖 1-1,其中方形的端點稱為終 端點,端點 a 到端點 d 代表 x1 ⋅ x2 ⋅ x4 =1,端 點 a 到端點 e 則代表 x1 ⋅ x2 ⋅ x 4 =1,各個最 小項對應的輸出值依其欲表示的函數而定,此 處以函數 x1 ⋅ x2 + x4 為例指定各終端點之值。 左右子樹相同的端點和同構的子圖都可 被省略,稱為化簡﹙reduced﹚。例如圖 1-1 中 端點 c 可省略,由端點 b 的左子樹直接連接到 值為 1 的終端點,而端點 f、g 和 h 為同構, 故只需一個。同樣的,代表 0 和 1 的終端點也 只各需一個即可。於是經過化簡後,只需要 5 個端點即可表示原函數﹙如圖 1-2﹚。此 BDD 的大小﹙size﹚就是 5。. 自二元決策圖﹙Binary Decision Diagram﹚ [1]用來表示布林函數的概念和其相關運算的 演算法被提出以來,就獲得許多研究者的採 用。然而要找出表達函數的最佳變數順序,計 算複雜度相當高[9],於是在過去的十年間, BDD 最小化的問題受到許多人的討論和研 究。雖然如此,數十到數百個輸入的電路至今 仍無實用的演算法能夠求出更為精確的解。本 論文針對這樣的問題,以亂數演算法,將過去 只能求出近似解的篩選﹙sifting﹚演算法[3]的 計算能力,提升到相當於求出精確最佳解演算 法一樣,效能上也有極佳的表現;benchmark LGSynth91 中輸入數小於 500 以下的電路,除 了 C6288.blif 以外,都已經找到了很好的解。 而我們提出的新方法更容易平行化,以符合更 大型電路求解的需求。 關 鍵 詞 : Minimization, Binary Decision Diagram, Randomized Algorithm. a b. 1. x1 0. x2. 1. 一、BDD 介紹與問題定義. 1. 設一布林函數 f(或邏輯電路)的 n 個變 數,以 x1, x2, …, xn 表示。當其中某一變數 xi 以常數 b,b ∈ {0, 1},取代(稱為 restriction of f,或 cofactor)[14],則表示為 f|xi=b,也就是: f|xi = b (x1, x2, …, xn) = f (x1, x2, …, xi-1, b, xi+1, …, xn) 依此方法,原函數式 f 可表示為 Shannon 分解﹙decomposition﹚[10]: f = xi ⋅ f|xi = 1 + x i ⋅ f|xi = 0. 1. 1 x2 0. c d. 1. 1. x1. 1. x4. 0. 1. f x4. e. 1 x2 0. 1. 0. 1. 1. 0. 1. x4. 0. 1. 0. 1. h x4. 0. 任何一個布林函數,無論其函數式是否已 化簡、或以何種方式呈現,只要是以同一變數 順序,轉換成 BDD,化簡後都會是標準的形 式(canonical form) 。BDD 能夠以標準的形式 表示,而且能有效率的運算的優點,讓它被廣 泛 的 運 用 在 邏 輯 設 計 驗 證 ﹙ logic design verification﹚、測試產生﹙test generation﹚、錯 誤模擬﹙fault simulation﹚ ,和邏輯合成﹙logic synthesis﹚等方面[11]。 但是 BDD 表示法有一個嚴重的問題[7]: 舉例而言,下面由左至右二個圖分別是以< x1, x2, x3, x4, x5, x6 >和< x1, x3, x5, x2, x4, x6 >的變數 順序表示函數 x1x2 + x3x4 + x5x6 的 BDD:. 0. g. 0. 圖 1-2、化簡﹙reduced﹚的 BDD. a b. f x4. 0. 0. 圖 1-1、全部展開﹙未化簡﹚的 BDD 1.

(2) x1. 而這個代號就是這個電路所代表之布林函 數的變數名稱,其順序就用來作為產生 BDD 時的初始變數順序。 2. 得到初始的變數順序之後,程式就以此順 序,以篩選演算法[8],計算所能得到最小 化的 BDD。 3. 記錄這個新 BDD 的大小(端點數量)、耗 費的計算時間…等。 4. 比較新 BDD 的大小,是否為最佳解。若已 得到最佳解的話,就記錄下最佳解的變數順 序。若不是最佳解的話,就隨機的(以亂數 產生器)產生一個新的變數順序,重複步驟 2 ~ 4。 5. 對於每一個電路,重複的隨機產生變數順 序,一直到篩選演算法得到最佳解為止,稱 為一次的實驗。每個電路都重複的做 100 次實驗,記錄每一次的實驗中,到底產生了 多少個變數順序(作為化簡演算法的初始變 數順序)才得到最佳解、和全部的計算花費 了多少的時間。 在﹙步驟 5 提到的﹚100 次實驗中,每一 次實驗我們都用一個不同的亂數種子 ﹙seed﹚,第一次實驗的 seed 是就 1,第二次 實驗的 seed 是 2,第三次實驗的 seed 是 3,…, 第 k 次實驗的 seed 是就 k;藉由不同的 seed 值的亂數改變變數順序,也方便後續研究時能 夠重覆實驗做確認。 以下是我們實驗過的一個電路, cordic.blif,的計算過程: 程式先以電路的變數順序作為初始的變 數順序: 初始變數順序:. x1. x2. x3 x3. x3. x5. x4. x2. x5 x2. x2. x5. x5. x2. x5 x4. x4. x6 x6. 1. 0 1 0 圖 1-3、變數順序對 BDD 大小的影響. 這個 n = 6 個變數的布林函數以< x1, x2, x3, x4, x5, x6 >的變數順序做轉換時,得到的 BDD 大小為 8 = n + 2﹙個端點﹚ ,相當於 O(n)的數 量,但是若以< x1, x3, x5, x2, x4, x6 >的變數順序 表示原函數時,將會得到含有 16 = 2n-log n 個 端點的 BDD,其大小﹙端點數量﹚變成指數 大小。在處理上就極耗時間及空間。. 二、我們所提出的亂數演算法 在本章中,我們將提出一個全新的概念, 用不同於以往的方式求解二元決策圖﹙BDD﹚ 最小化﹙minimization﹚的問題,實驗的數據 將顯示這個新方法會有極佳的效能。 整個過程由數個實驗組成。全部實驗分成 三個部分:首先,第一個實驗要試試看新的方 法是否有效;如果新方法的確在效能上有所增 進的話,則進行第二個實驗,將所有已知最佳 解的電路,都以新方法實際求解,推算出求取 最佳解所需的計算成本;第三個實驗則是以第 二個實驗所得的結果,嘗試將 benchmark 中尚 未有最佳解的電路,一一求解。. a6 a4 a3 a2 a5 v x0 x1 x2 x3 y0 y1 y2 y3 z0 z1 z2 ex0 ex1 ex2 ey0 ey1 ey2 經過 0.32 秒的計算,以此順序所能計算 得到的最小化 BDD 的大小為 43(個端點) , 大於已知的 42(個端點) 。於是隨機的重排變 數順序: 第二個初始變數順序為:. 實驗一: 我 們 以 benchmark LGSynth 91 中 的 電 路 cordic.blif(benchmark 中,已知最佳解的一個 電路)為例子,說明求解的過程﹙.blif 格式的 檔案是 benchmark LGSynth91 中的一種電路描 述格式,用來描述邏輯電路。LGSynth91 則可 由 International Logic Synthesis Workshop[15] 取得﹚: 1. 程式讀入電路中各輸入的代號,cordic.blif 這個電路有 23 個輸入,各以 a6, a4, a3, a2,. a3 x2 z2 y2 a4 z1 y0 y3 ey0 ex0 z0 a2 ey2 x3 a5 ex1 ex2 a6 ey1 v y1 x0 x1 以此新變數順序作為初始變數順序,計算 0.31 秒後,得到最小化的 BDD 是以 a2 a4 a3 a6 a5 z2 z1 z0 y2 y0 y3 y1 x2 x3 x0 x1 ey0 ey2 ey1 v ex0 ex1 ex2 為變數順序,大小為 42,已經是 最小值了。也就是說,在這一次的實驗中,程. a5, v, x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, ex0, ex1, ex2, ey0, ey1, ey2 為代表的符號, 2.

(3) 100 次實驗中,在第 50 次、第 91 次和第 94 次的實驗,需要超過 10 個(分別是 11 個、 17 個和 13 個)初始變數順序才能得到最佳解。 限於篇幅,以下只繪出第 91 次的實驗中 各變數順序所花費的計算時間(如圖 2-1):. 式 產生 了二個 變數 順序( 作為 初始變 數 順 序),才使得篩選演算法得到最佳解。全部的 計算時間是 0.63 秒。 我們接著改變亂數產生器的種子 (seed),重做一次實驗,看看結果如何: 改變 seed 值之後,產生出的變數順序為:. 0.4. x1 v z2 y1 y2 y0 ey2 a2 x2 y3 a6 z0 a4 z1 ex0 x0 a3 ex1 x3 a5 ex2 ey1 ey0 以此新變數順序作為初始變數順序,在 0.31 秒的計算後,得到最小化的 BDD 大小為 42﹙以 a2 a3 a4 a6 a5 y1 y2 y0 y3 x1 x2 x0 x3 z2 z0 z1 ex0 ex1 ex2 v ey2 ey1 ey0 為變數順序﹚ , 是已知的最小值。所以在這一次的實驗中,篩 選演算法依照亂數產生器產生的初始變數順 序在第一次就得到最佳解了。在這裡,我們注 意到 BDD 的最佳變數順序可能不只一種! 再以不同的 seed,進行第三次實驗: 這一次的實驗中,第一次的變數順序是:. 0.35 計 算 時 間 0.3 ︵ 秒 ︶ 0.25. 0.2 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11 12 13. 14 15 16. 17. 第幾個變數順序. 圖 2-1、第 91 次的實驗各變數順序的 計算時間 cordic.blif 這個電路的各次實驗的計算時 間如圖 2-2 所示: 6. y1 a4 a5 y2 x2 a3 x1 y3 z2 x3 z1 ex0 ex2 z0 ex1 ey0 y0 ey1 ey2 a6 a2 v x0 而化簡的計算花了 0.28 秒,只能得到最 小化的 BDD 大小為 55。 第二次的變數順序是:. 5 計4 算 時 間3 ︵ 秒 ︶2. z0 a6 z1 x3 z2 ex1 y0 ex2 y2 y1 a3 ex0 ey0 y3 ey1 x0 ey2 a4 x1 x2 a2 a5 v 花費了 0.29 秒的計算得到最小化的 BDD 大小為 55。 第三個初始變數順序為:. 1. 0 1. 11. 21. 31. 41. 51. 61. 71. 81. 91. 100. 第幾次實驗. 圖 2-2、cordic.blif 電路的計算時間. z2 x2 x1 a5 ex0 a3 a2 x0 y2 ex1 z0 z1 y1 ex2 y3 y0 a4 ey0 v ey1 ey2 a6 x3 在 0.25 秒的計算後,所能得到最小化 BDD ﹙以 a2 a4 a3 a6 a5 y2 y1 y3 y0 x2 x1 x0 x3 z2 z0 z1 ex0 ex1 ex2 v ey0 ey1 ey2 為變數順 序﹚的大小為 42。 所以這一次的實驗需產生 3 個變數順 序,共花了 0.82 秒得到最佳解。 因為是以亂數的方式隨機的產生變數順 序,所以每次可能需要產生不同數量的變數順 序(作為初始變數順序)才能得到最佳解。於 是,以不同的亂數種子(seed),重複進行實 驗,看變數順序數量的需求是否有一可預測的 趨勢。. cordic.blif 這個電路在各次實驗中,變數 順序的需要量如圖 2-3: M ax = 17. 變 數 順 序 需 要 量. 15. 10. 5. 0 1. 11. 21. 31. 41. 51. 61. 71. 81. 第幾次的實驗 100 91. 圖 2-3、cordic.blif 電路的變數順序需要量 變數順序需要量的統計如下頁之圖 2-4 所示:. 3.

(4) 前所知最佳的求解方法之計算時間,和我們提 出的新方法所用的計算時間的比較。. 40 35 30 25 實 驗 20 次 數 15. 實 驗 數 量. 8. 10. 最大執行時間:5.14 sec. 最小執行時間:0.24 sec.. 6. 5 0. 4 1. 2. 3. 4. 5. 6. 7. 8. 9 10 11 12 13 14 15 16 17. 變數順序需要量 2. 圖 2-4、cordic.blif 電路的變數順序需要量. 0 0.24. 在 100 次的實驗中,只有三次需要產生 10 個以上的變數順序,有高達 89 次的實驗, 都可以在 5 個(log2 n = 5)變數順序內得到 最佳解。 對於 cordic.blif 這個電路而言,平均只要 產生 2 個變數順序(平均計算時間 0.95 秒), 就可以得到最佳解。計算時間的統計如圖 2-5 所示。 Drechsler 等人在 2000 年發表的精確最小 化﹙exact minimization﹚演算法[9]是以前得到 結果最佳的演算法,但是此法需耗用大量的計 算時間。在該論文中有 31 個 benchmark 電路 的最小化 BDD 被求出;下面的列表 2-1 是以. 1.24. 2.24. 計算時間(秒) 4.24 5.14. 3.24. 圖 2-5、cordic.blif 電路計算時間的統計 本實驗中,我們提出的新方法是在 Sun Ultra 1 上執行,和 Drechsler 之論文中所用的 平台是一樣的,作業系統是 UNIX System V Release 4.0,編寫程式所用的語言都是 C++, 前述步驟 2 中的最小化計算程式也是在相同 的平台下,使用 Fabio Somenzi 教授所編寫的 CUDD 2.3.1[12]之收斂式篩選化簡演算法。由 於篩選演算法可能仍有改進的空間,為了避免 模糊本論文中亂數演算法在 BDD 最小化問題 上效能表現的焦點,所有實驗皆直接採用[8] 中的篩選演算法,程式可於網站[16]下載。. 表 2-1、在 Ultra 1 – 140 (UNIX System V Release 4.0)上面執行 BDD 最小化演算法的結果 電路 名稱. cc cm150a cm162a cm163a cmb comp cordic cu i1 lal mux parity pcle pm1 s1488 s208.1 s298 s344 s349 s382 s386 s400 s444. 輸入數. 最小 size. 21 21 14 16 16 32 23 14 25 26 21 16 19 16 14 18 17 24 24 24 13 24 24. 46 33 30 26 28 95 42 32 36 67 33 17 42 40 369 41 74 104 104 119 109 119 119. Drechsler 之演算法[9] 我們的新方法計算時間(秒數) 的計算時間(秒數) 最大值 平均值. 753.3 3858.8 4.2 7.7 0.1 47605.4 23.8 6.5 198.7 4595.4 3872.7 0.1 60.1 3.8 90.0 57.1 93.4 11519.2 11546.3 6637.6 14.1 6846.8 6934.0. 2.92 0.39 0.8 0.77 0.28 0.97 5.14 0.77 1.03 0.51 0.37 0.28 0.3 0.32 16.51 1.94 1.19 7.79 8 10.25 11.17 10.27 12.18 4. 0.7 0.31 0.43 0.43 0.25 0.72 0.95 0.46 0.29 0.3 0.29 0.23 0.26 0.26 3.82 0.44 0.35 1.61 1.67 1.9 2.27 1.91 2.73. 變數順序之數量 最大值 平均值. 12 1 3 3 1 2 17 3 4 2 1 1 1 1 42 7 5 28 28 35 41 35 43. 2 1 1 1 1 1 2 1 1 1 1 1 1 1 9 1 1 5 5 6 8 6 9.

(5) s526 s820 s832 sct t481 tcon ttt2 vda. 24 23 23 19 16 17 24 17. 113 220 220 48 21 25 107 478. 8809.1 17145.3 17953.8 60.6 1.2 3.7 7087.2 641.6. 7.41 7.5 11.1 1.21 3.11 0.31 3.35 11.65. 我們的程式以作業系統提供的 g++編譯 程式﹙compiler﹚編譯後執行。表 2-1 中所有 電路都是在同一台機器上執行的結果;雖然使 用相同的機器,但我們的機器上只有 64Mb 的 記憶體﹙比起 Drechsler 所用的 300Mb 要來得 少﹚。不能確定是否是記憶容量的關係,在我 們的機器上並無法達成[9]中所敘述的效能,所 以,我們並未重複 Drechsler 的實驗,表中 「 Drechsler 之 演 算 法 的 計 算 時 間 」 是 由 Drechsler 的論文中直接抄錄而來。 表 2-1 中的粗體字表示我們所提出的新方 法可於較短的時間內,找出最佳解,達成和精 確解演算法一樣的效果。在表中可以發現, Drechsler 的精確解演算法無法在很短的時間 算出的電路,我們所提出的新方法卻有很好的 表現:即使是最耗時的電路 comp,新方法也 可以在 1 秒內得解。 我們的新方法雖然是用隨機的方式產生 變數順序,但是看來有相當穩定的表現(見下 圖),對新方法而言,最耗時的電路(s1488) 也只用了不到 20 秒的時間就得到最佳解了。. 2 5 4 1 1 1 2 3. 最大值. 16. 平均值. 14 12 時 間 10 ︵ 秒 8 ︶ 6 4 2 電路名稱(依字母順序). cm c cm150c cm162a 16 a 3 c a co mb co mp rd ic cu i1 l m al pa ux rit pc y p le s1 m1 s2 488 08 s2 .1 9 s3 8 s344 4 s3 9 8 s3 2 8 s4 6 0 s4 0 4 s5 4 s826 2 s8 0 32 s t4 ct 8 tc 1 o ttt n 2 vd a. 0. 圖 2-7、新方法的計算時間 實驗二: 本 實 驗 針 對 benchmark (LGSynth 91) 中,已知最佳解的 48 個電路,嘗試以收斂式 對稱篩選演算法[12]執行 BDD 最小化運算, 每次皆先以隨機的方式產生初始變數順序求 解,接著重複產生變數順序,直到求得最佳解 為止,看看需要產生多少個變數順序,才能得 到最佳解;並記錄其計算時間,觀察整個結 果,看是否能得到一些資訊,來估計出到底要 多少個初始變數順序,才能夠得到最佳解。 在這個部份的實驗中,我們不再用 Ultra 1 – 140 的機器,而改用 Pentium II 450。Ultra 1 – 140 的主時脈是 143MHz,計算的速度比起 現在普遍的 Pentium II 慢。而這個部份的電路 並不是很複雜,我們不用 Pentium IV,因為其 計算速度相當快,將會使得數據都很小﹙當 然,在 Pentium IV 越來越普及後,實際的運用 上改以更快的機器亦無不可﹚。電路全部都是 在同一台機器﹙Pentium II 450﹚上執行的結 果。因為硬體的改變,作業系統也改用最普及 的 Microsoft Windows 2000 作業系統;不過執 行收斂式篩選演算法的程式﹙CUDD 2.3.1﹚, 需要 UNIX 的系統呼叫,所以我們依照其說明 安 裝 了 軟 體 Cygwin 程 式 ( 可 於 網 站 http://sourceware.redhat.com/cygwin取得﹚,然 後以它附帶的編譯器 g++ 重新編譯所有的程 式來執行。. Drechsler的方法 我們的方法. 10000. 1000 時 間 ︵ 100 秒 ︶ 10. 1 電路名稱(依字母順序). cm c cm150c cm162a 16 a 3 c a co mb co mp rd ic cu i1 la m l pa ux rit pc y p le s1 m1 s2 488 08 s2 .1 s398 s344 s349 s382 s486 s400 s544 s826 s820 32 s t4 ct 8 tc 1 o ttt n 2 vd a. 0.1. 24 19 28 5 4 1 11 26. 18. 本文中新方法的計算時間如圖 2-6 及 2-7 所示: 100000. 0.89 1.98 1.78 0.36 0.96 0.21 0.85 1.73. 圖 2-6、本文中新方法計算時間的最大值和 以前最好的演算法之比較. 5.

(6) 須藉助我們的新方法才能得到最佳解)。 同樣的,有 17 個電路(只是數量上的巧 合),即使改變初始變數順序,收斂式的對稱 篩選演算法也無法在第一次求出最佳解,對於 這一類的情形,若不用耗時的精確解演算法或 用本文中的新方法,就無法得到最佳解了。. 下頁表 2-2 列出了執行的結果﹙限於篇幅 只列出了 20 個電路﹚ :在此 48 個電路中有 17 個電路,不受到初始變數順序的影響,可直接 以收斂式的對稱篩選演算法[9]求得最佳解。其 他約 64.6%的電路就沒那麼幸運了,選用了不 好的變數順序時,就無法直接得到最佳解(必. 表 2-2、在 PII 450 (Windows 2000) 上的實驗結果﹙共計 48 個電路,只列出了 20 個電路﹚ 計算時間(秒數) 變數順序之數量 電路名稱 輸入數 最小 size 最大值 平均值 最大值 期望值 9symml 9 25 0.04 0.03 1 1 alu4 14 350 13.73 2.87 123 26 C17 5 7 0.07 0.02 3 1 cm162a 14 30 0.17 0.03 5 1 cm85a 11 28 0.06 0.04 2 1 comp 32 95 0.23 0.15 1 1 cordic 23 42 0.79 0.33 12 3 decod 5 32 0.04 0.02 1 1 i1 25 36 0.11 0.05 3 1 majority 5 8 0.04 0.01 1 1 mux 21 33 0.1 0.09 1 1 parity 16 17 0.04 0.02 1 1 s1488 14 369 4.86 1.31 51 13 s208.1 18 41 0.26 0.08 4 1 s349 24 104 1.96 0.3 34 5 s386 13 109 2.89 0.42 59 9 s400 24 119 2.34 0.39 39 6 s526 24 113 0.82 0.26 11 3 s832 23 220 2.73 0.55 25 5 t481 16 21 0.72 0.26 3 1 在表 2-2 數據中可得知,欲求得最佳解需 要產生之變數順序數量的平均值如圖 2-8:. 18 16 14. 35. 電 12 路 10 數 8 量 6. 30 25. 電 路 20 數 15 量 10. 4 2 0. 5. 1. 0 1. 6. 11. 16. 21. 26. 11. 21. 31. 41. 51. 61. 71. 81. 91. 101. 得到最佳解所需產生之變數順序的數量. 111. 126 121. 圖 2-9、欲求得最佳解所需產生之變數順序 數量的最大值. 31. 得到最佳解所需產生之變數順序的數量. 圖 2-8、欲求得最佳解所需產生之變數順序 數量的平均值. 由此可知,最多需要﹙隨機﹚產生 123 個 不同的變數順序,以得到最佳解。同樣的,只 需產生到 59 個不同的變數順序,就可求解 97.9% 的電路。計算時間之平均值則如下頁圖 2-10 所示:. 此外,97.9% 的電路平均只需﹙以亂數隨 機﹚產生 13 個不同的變數順序做為初始順序 ﹙initial ordering﹚,就能求得最佳解。欲求得 最佳解需要產生之變數順序數量的最大值則 如下圖所示:. 6.

(7) 9. 1000. 變 數 順 序 需 要 量. 8 7 電 路 數 量. 6 100. 5. 最大值 期望值. 4 3 2 10. 1 0 0. 0.5. 1. 1.5. 2. 2.5. 3. 計算時間﹙秒﹚. 輸入數 ( n ). 1. 圖 2-10、欲求得最佳解所需計算時間的平均值. 0. 每個電路重複做 100 次實驗,其平均計算 時間如上圖。幾乎所有的電路都可在 1.31 秒 內得到最佳解。計算時間之最大值如下圖: 12 10 電 8 路 6 數 量 4 2 0 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 計算時間﹙秒﹚. 圖 2-11、欲求得最佳解所需之 計算時間的最大值 在最壞的狀況下,需要計算 13.73 秒以求 得最佳解。同樣的,在最壞的狀況下,97.9% 的 電路仍可於 4.86 秒內得到最佳解。 實驗三: 由於 BDD 最小化計算的複雜度相當高, 所以許多 benchmark 中的電路都還沒有最佳 解。在接下來的實驗中,我們要試看看新的方 法是否能讓 BDD 最小化的能力更向前推進一 步。我們先整理一下實驗二所得的數據﹙如下 圖 2-12 所示﹚,橫﹙x﹚軸代表的是電路的輸 入數,縱﹙y﹚軸所代表的是求出真正最佳解 需要﹙隨機﹚產生多少個初始變數順序。由圖 2-12 可以看出,輸入數少於 5 個的電路,收斂 式 篩選演 算法 幾乎不 受初 始變數 順序 的影 響,可以直接求出最佳解。當輸入數為 5 時, 就會受到初始變數順序的影響了,最壞的狀況 下,要﹙隨機﹚產生 5 個初始變數順序,收斂 式篩選演算法才能求得最佳解! 就這些已經知道真正最佳解的電路而 言,需要最多初始變數順序的是一個 14 個輸 入的電路﹙alu4.blif﹚ ;在我們的實驗中,這個 電路需要超過 123 個初始變數順序才能求得 最佳解。. 7. 5. 10. 15. 20. 25. 30. 35. 圖 2-12、欲求得最佳解所需計算時間的 最大值 根據實驗二所得的數據﹙如圖 2-12 所 示﹚,求出最佳解所需的變數順序數量都未曾 超出 n1.8 或是 n( log n)2;也就是說:在已知的 數據中顯示,若以隨機產生的 n2 個變數順序 做為初始變數順序,計算所得到最好的答案, 幾乎就是最佳解了。 所以,對於每一個尚未有最佳解的電路, 我們將隨機產生 n2 個變數順序,經由對稱篩 選方式計算 BDD 最小化,計算至收斂演算 法,求取所能得到的最佳解。 由於尚未有最佳解的電路不少﹙超過五十 個﹚,而且有許多電路的輸入數都超過 100, 要產生 n2 個變數順序來求最佳解必須花費大 量 的 時 間 ; 所 以 我 們 以 11 台 Pentium IV 1.4GHz 的電腦﹙配備記憶體 128Mb﹚分別運 算 , 每 台 電 腦 上 都 是 安 裝 Winodws 2000 professional edition 的 作 業 系 統 , 再 加 上 Cygwin 這個軟體以提供 CUDD 執行的需要。 這 11 台電腦各別的執行數個電路的最小化計 算。幾個輸入數大於 400 的電路各由一台電腦 負責最小化計算﹙因為其 n2 很大,要計算較 長的時間﹚,而其他的電腦則負責數個 n 值較 小的電路。 表 2-3 中的每一個電路,我們都隨機產生 2 n 個變數順序來求取最佳解,並記錄下程式發 現的最佳解是在第幾個變數順序時找到的,以 供後續的研究和確認。 我們以 mm30a.blif 這個電路來說明表中 的數據:這個電路有 123 個輸入,當程式(隨 機的)產生了 15129(1232 = 15129)個變數順 序作為收斂式對稱篩選演算法的初始變數順 序來做最小化運算,其中有 3149 個初始變數 順序導致程式運算的時間超過計算時間的上 限﹙300 秒﹚ 。在以第 1454 個變數順序做化簡 時,得到了最佳變數順序,而依此變數順序建 立的 BDD 大小為 11504(個端點)。.

(8) 表 2-3、在 Pentium IV - 1.4GHz 128Mb, Windows 2000 + Cygwin 上最小化各個電路的結果 電. 路. 名. apex6.blif apex7.blif b9.blif bigkey.blif C1355.blif C1908.blif C2670.blif C3540.blif C432.blif C499.blif C5315.blif C7552.blif c8.blif c880.blif cht.blif clma.blif clmb.blif count.blif dalu.blif des.blif dsip.blif example2.blif frg1.blif frg2.blif i8.blif i9.blif k2.blif mm30a.blif mm9a.blif mm9b.blif mult16a mult16b mult32a my_adder.blif pair.blif pcler8.blif rot.blif s1196.blif s1423.blif s420.1.blif s510.blif s5378.blif s641.blif s713.blif s838.1.blif s9234.1.blif sbc.blif term1.blif too_large.blif unreg.blif x1.blif x2.blif x3.blif x4.blif z4ml.blif. 稱. 輸入數 n. 135 49 41 486 41 33 233 50 36 41 178 207 28 60 47 415 415 35 75 256 452 85 28 143 133 88 45 123 39 38 33 47 65 33 173 27 135 32 91 34 25 199 54 54 66 247 68 34 38 36 51 10 135 94 7. 全部產生了多少個變 其中失敗(逾時 300 最小的 BDD 是在第幾次 最小 BDD 的 size 數順序(n2) 秒)了多少次 發現的. 18225 2401 1681 236196 1681 1089 54289 2500 1296 1681 31684 42849 784 3600 2209 172225 172225 1225 5625 65536 204304 7225 784 20449 17689 7744 2025 15129 1521 1444 1089 2209 4225 1089 29929 729 18225 1024 8281 1156 625 39601 2916 2916 4356 61009 4624 1156 1444 1296 2601 100 18225 8836 49. 490 214 97 1565 25866 5705 1784 23828 1132 25866 1744 5249 80 4053 90 725 561 81 689 2928 2456 265 72 849 1276 908 1243 11504 1111 1527 116 93 235 82 2370 86 2837 598 1677 81 146 1873 381 381 161 2560 904 75 302 82 399 31 490 320 17 8. 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 3149 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0. 604 4 10 64 17 34 13574 1 908 20 605 19098 1 60 1 441 3004 1 3 43716 1 2 66 6291 5 7 37 1454 24 9 907 1 1840 1 8451 1 18186 1 625 1 12 21035 7 7 1 26252 1523 3 102 1 1789 1 15 25 1.

(9) 倒不必去求出臨界值,計算時限大約設定為第 一個變數順序計算時間的 3 ~ 5 倍即可;因為 若設定得太剛好的話,也是有可能會錯過最佳 解,所以設定計算時限的時候,設定的值應該 比臨界值高。 在表 2-3 中,有 14 個電路在第 1 個變數 順序就找到一個很好的變數順序(使得 BDD size 很小),之後(隨機)產生的 n2-1 個變數 順序都無法使 BDD 更小。 綜合我們所有的數據,有大約 30.1%左右 的電路,可直接以收斂式的對稱篩選演算法求 得最佳解的,也就是說,單純的用收斂式的對 稱篩選演算法,雖然速度很快,但是有接近 70%的電路並不是最佳解!而採用新方法的 話,幾乎都可得到最佳解,而運算時間和硬體 配備都小於精確解演算法的需求。 對於過去尚未有最佳解的電路,我們收集 到了 23 個電路的解,如表 3-1 的第四欄所示: 電路 apex6.blif 在過去所能找到的最小 BDD 有 622 個端點,而採用新方法來求最佳解之後, 找到的最小 BDD 只需要 490 個端點就可表示 同一電路,有 21.2%的改進。. 當我們在考慮計算時間上限的設定時,我 們發現有圖 2-13 所顯示的情形: 成 功 率. 100%. 80%. 60%. 40%. 20% 計算時間限制:秒 0% 0. 300. 200. 400. 600. 800. 1000. 圖 2-13(a)、電路 mm30a.blif 的計算時間限制 和失敗率的關係 100% 初始大小:100591. 80% 成功率 最小size. 60%. 40%. 20% 計算時間的限制 0% 1. 10. 100. 1000. 10000. 圖 2-13(b)、電路 mm30a.blif 的計算時間限制 和失敗率的關係 圖 2-13 是我們以不同的計算時間上限 值,來限制 mm30a.blif 這個電路求解的計算: 當我們限制求解最小化的演算法只能計算 14 秒﹙或更短的時間﹚時,有 95%以上的初始變 數順序都未能在時限內得解,在 100 個﹙隨機 的﹚初始變數中能夠找到的最小 BDD 大小是 18801,而當時限增加到 15 秒之後,見圖 2-13(b),無法得解的情形就大為減少了!同樣 是 100 個﹙隨機的﹚初始變數,找到的最小 BDD 大小是 14506;可見當時限設得太小時, 會錯過得解的機會。 反之,時限設得長,可以避免上述問題; 但是上圖中可以看出,當時限超過 300 秒之 後,不到 20%的初始變數順序無法在時限內求 解,在 100 個﹙隨機的﹚初始變數中能夠找到 的最小 BDD 相同於 15 秒時限所能找到的。即 使再增加到 600 秒﹙或更長﹚,無法求解的變 數順序量也不會明顯的減少。當時限設得長的 時候,雖然有更多的初始變數順序都可以求 解,但是卻不會找到更小的 BDD,似乎浪費 了許多時間在不必要的計算上。 對這個電路而言,15 秒就像一個臨界值 一般,若想讓程式能夠順利的運作,時限便不 得低於這個臨界值;在我們的觀察中顯示出, 許多電路都有相同的狀況。在實際的應用上,. 三、效能分析 雖然亂數演算法大大的增進了求取近似 解演算法的能力,使得它有了相當於求取精確 解演算法的能力,但是,近似解演算法的選用 也相當重要。如下圖所示,我們亦嘗試過以模 擬鍛鍊﹙simulated annealing﹚演算法[6]來求 解,改以模擬鍛鍊演算法雖可於較少的變數順 序內得到最佳解,但其計算時間就顯著的落後 於收斂式對稱篩選演算法了﹙這似乎也說明了 為何模擬鍛鍊演算法雖能找到較佳的解答,但 篩選演算法卻受到較多重視和討論的原因﹚。 以各個不同方法化簡時,所需的變數順序 數量(最大值)如下圖所示: 10000. Sift 收斂式sift. 變 1000 數 順 序 100 的 數 量 10. 電路名稱(依字母順序). cm cm150cc cm162a 16 a c 3a comb c o mp rd ic cu i1 la l m pa ux ri pcty p le s1 m1 s2 488 08 s2 .1 s398 s344 s349 s382 s486 s400 s544 s826 s820 32 s t4 ct 8 tco1 tttn vd 2 a. 1. Simulated annealing. 圖 3-1、各種不同方法化簡時,所需的 變數順序數量(最大值). 9.

(10) 表 3-1、新舊方法所得到的 BDD size 之比較﹙” - ”表示未知最小 size﹚ 輸入數 新方法找到的最小 以前文獻所知 改進 Fabio 網站[13] 改進[13] 電 路 名 稱 n BDD 之 size 的最小 size[8] 比率 上的最小 size 的比率 apex6.blif 135 490 622 21.2% 498 1.6% apex7.blif 49 214 b9.blif 41 97 bigkey.blif 486 1565 1595 1.9% C1355.blif 41 25866 26756 3.3% 25866 0.0% C1908.blif 33 5705 6380 10.6% 5526 -3.2% C2670.blif 233 1784 2057 13.3% 1774 -0.6% C3540.blif 50 23828 23850 0.1% 23828 0.0% C432.blif 36 1132 1221 7.3% 1064 -6.4% C499.blif 41 25866 26909 3.9% 25866 0.0% C5315.blif 178 1744 2262 22.9% 1719 -1.5% C7552.blif 207 5249 10072 47.9% 2212 -137.3% c8.blif 28 80 c880.blif 60 4053 4384 7.6% 4053 0.0% cht.blif 47 90 clma.blif 415 725 738 1.8% clmb.blif 415 561 690 18.7% count.blif 35 81 dalu.blif 75 689 860 19.9% 689 0.0% des.blif 256 2928 2948 0.7% 2945 0.6% dsip.blif 452 2456 3033 19.0% example2.blif 85 265 frg1.blif 28 72 frg2.blif 143 849 1434 40.8% 963 11.8% i8.blif 133 1276 2181 41.5% 1276 0.0% i9.blif 88 908 k2.blif 45 1243 1319 5.8% 1246 0.2% mm30a.blif 123 11504 17626 34.7% 11065 -4.0% mm9a.blif 39 1111 2023 45.1% 1111 0.0% mm9b.blif 38 1527 1683 9.3% 1527 0.0% mult16a 33 116 mult16b 47 93 mult32a 65 235 my_adder.blif 33 82 pair.blif 173 2370 pcler8.blif 27 86 rot.blif 135 2837 s1196.blif 32 598 598 0.0% s1423.blif 91 1677 3277 48.8% 1796 6.6% s420.1.blif 34 81 s510.blif 25 146 s5378.blif 199 1873 2010 6.8% 1932 3.1% s641.blif 54 381 s713.blif 54 381 s838.1.blif 66 161 s9234.1.blif 247 2560 3490 26.6% 3045 15.9% sbc.blif 68 904 1043 13.3% 917 1.4% term1.blif 34 75 too_large.blif 38 302 336 10.1% 319 5.3% unreg.blif 36 82 x1.blif 51 399 x2.blif 10 31 x3.blif 135 490 x4.blif 94 320 z4ml.blif 7 17 10.

(11) 劣;在尚未有更好整體表現的演算法出現之 前,在實用上應混合兩個演算法,當找出一個 較佳的解之後,就以此一新的 BDD 大小為上 限,計算過程中,導致 BDD 大小超過此一上 限的變數順序都無須再計算了。 至於計算的複雜度就如同之前篩選演算 法和模擬鍛鍊演算法一樣,因為尚未有足夠的 理論可以推算,所以無法確認計算的複雜度。 只能說大約是 O(nc),c 是一個常數;不過可以 知道的是,就亂數產生 n2 個不同的初始變順 順序而言,將增加 O(n2)的複雜度。這相對於 以往最佳演算法的複雜度 O(3n)仍然是很小。. 以各個不同方法化簡時,所需的計算時間 (最大值)如下圖所示: 100000. 精確解演算法 Sift 收斂式sift. 計 1000 算 時 間 : 10 秒. 電路名稱(依字母順序). cm c cm150c cm162a 16 a 3 c a co mb co mp rd ic cu i1 l m al pa ux rit pc y p le s1 m1 s2 488 08 s2 .1 s398 4 s3 4 s349 8 s3 2 s486 0 s4 0 s544 2 s8 6 s820 32 s t4 ct 8 tc 1 o ttt n 2 vd a. 0.1. Simulated annealing. 圖 3-2、各種不同方法化簡時,所需的計算時 間(最大值). 四、結論. 截至目前,所有求解 BDD 最小化問題的 演算法都會受到初始變數順序的影響。以某一 種變數順序為初始變數順序時,使用 A 演算 法所得的結果可能比使用 B 演算法的結果 差,但是使用另一種初始變數時,使用 A 演 算法的結果可能就比較好了,於是,很難斷定 哪一個演算法比較好。當使用亂數產生器來產 生多個變數順序,做為 BDD 最小化演算法的 初始變數順序時,初始變數順序的影響就此被 排除,在計算複雜度難以估算的困境下,仍可 以圖 3-1 和圖 3-2 的方式比較出各個演算法的 優劣。這也不失為亂數演算法的一個貢獻。 接下來的例子說明這個情形:在我們評估 的幾種 BDD 最小化演算法中,收斂式的篩選 演算法有最佳的整體表現,大部份的電路都可 於最短的時間內求得最佳的變數順序,但是, 在表 3-1 中可以發現 C7552.blif 這個電路以收 斂式篩選演算法計算 n2 個初始變數順序之後 所能找到的最小 BDD 仍需要 5249 個端點﹙比 起已知的最小 2212 個端點還大很多﹚ ,當我們 改用模擬鍛鍊演算法來求解時,在第 266 個初 始變數的時候,就找到能夠以 2161 個端點表 示 C7552 這個電路的變數順序了。模擬鍛鍊演 算 法 計 算 266 個 初 始 變 數 所 花 費 的 時 間 ﹙ 874,894 秒 ﹚ 近 乎 是 收 斂 式 篩 選 演 算 法 ﹙470,161 秒﹚的 2 倍。截至目前的資料顯示, 收斂式篩選演算法無法在 n2 個初始變數順序 內找到﹙端點數誤差在 10%以內的﹚最佳變數 順序的電路約有 1%左右。 上述例子顯示出收斂式篩選演算法有最 佳的時間效能﹙但有少部份的電路無法得到最 佳解﹚,模擬鍛鍊演算法能找到較佳的變數順 序﹙但是計算時間可能非常的長﹚,各有其優. 在本論文中,我們提出了一個不同於以往 的新概念來求解 BDD 最小化問題,實驗的數 據顯示這個新方法有極佳效能;這樣一個新方 法之所以能奏效,揭露了 BDD 最小化問題在 求解時可利用的特性: 1. 相對於求精確解的演算法,求取近似解的演 算法相當的快﹙計算複雜度低很多﹚:求取 一次精確解所耗費的時間,可允許重複求取 多個近似解;在數據中顯示,稍微複雜一點 的電路,求取精確解的計算時間,約為求取 近似解計算時間的數千倍到數萬倍不等,也 就是說,可以讓求取近似解的演算法”算錯” 數千到數萬次。當然,求取近似解的演算法 並不是每次都找不到最佳解的。 2. BDD 化簡的最佳解,答案並不是唯一的, 幾乎都有一個以上的解答﹙可使得 BDD 最 小﹚。也就是說,“猜”中的機率不低。相反 的,在求取精確解的過程中,不能排除的搜 尋空間很大,以致於求精確解的計算時間居 高不下。於是在兩者的比較下,亂數演算法 顯然表現優異。 3. 我們的方法仍有賴於求取近似解的演算 法:對於輸入數 n 小於 500 以下的電路,我 們都已將最佳解列於第二章的列表中;而 C6288.blif 這個電路並未能完成計算,因為 以最新版篩選演算法(cudd 2.3.1)來執行 時,程式無法順利完成計算。 本文所介紹的新方法,不同於以往的概 念,在計算的效能上亦有大幅的改進,深具實 用的價值。除此,在任兩次的求解計算上,並 沒有資料的相依性,這樣的演算法比以往的方 11.

(12) 法更具實用性,可以非常容易的改成平行演算 法,幾乎不需做任何的更動,當然更有助於大 型電路的求解了。. 10. J. C. Muzio, T. C. Wesselkamper, “Multiple-Valued Switching Theory,” Adam Hilger Ltd Bristol and Boston, 1986. 11. R. E. Brant, “Symbolic Boolean Manipulation with Ordered Binary-Decision Diagrams,” ACM, Comp. Surveys, vol. 24, 293-318, 1992.. 四、參考文獻 1.. 2.. R. E. Bryant, “Graph-based algorithms for Boolean function manipulation,” IEEE Trans. Comput., vol. 35, pp. 677-691, Aug. 1986.. 12. F. Somenzi, CUDD: CU Decision Diagram Package – Release 2.3.1 Technical report, Dept. of Electrical and Computer Engineering, University of Colorado, Boulder, Colorado, Feb. 2001.. S. J. Friedman and K. J. Supowit, “Finding the optimal variable ordering for binary decision diagrams,” IEEE Trans. Comput., pp. 710-713, May 1990.. 13. 網站http://vlsi.colorado.edu/~fabio. 3. R. Rudell, “Dynamic variable ordering for ordered binary decision diagrams,” Int. Conf. Computer-Aided Design, pp. 42-47, 1993. 4.. 5.. 14. R. K. Brayton, G. D. Hachtel, C. T. McMullen and A. L. SangiovanniVincentelli, "Logic Minimization Algorithms for VLSI Synthesis," Kluwer Academic Publishers, Boston. 1984.. S.-W. Jeong, T.-S. Kim, and F. Somenzi, “An efficient method for optimal BDD ordering computation,” in Proc. Int. Conf. VLSI and CAD, 1993.. 15. 網站ftp://mcnc.mcnc.org 16. 網站http://vlsi.colorado.edu/~fabio. S. Panda and F. Somenzi, “Who are the variables in your neighborhood,” in Int. Conf. Computer-Aided Design, pp. 74-77, 1995.. 6. B. Bolling, M. Löbbing, and I. Wegener, “On the effect of local changes in the variable ordering of ordered decision diagrams,” Inform. Processing Lett., vol. 59, pp. 233-239, Oct. 1996. 7. B. Bolling, I. Wegener, “Improving the variable ordering of OBDDs is NP-complete,” IEEE Trans. Computer., vol. 45, pp 993-1002, Sep. 1996. 8.. R. Drechsler, W. Günther, and F. Somenzi, “Using lower bounds during dynamic BDD minimization,” IEEE Trans. ComputerAided Designs, vol. 20, pp. 51-57, Jan. 2001.. 9.. R. Drechsler, N. Drechsler, and W. Günther, “Fast exact minimization of BDDs,” IEEE Trans. Computer-Aided Designs, vol. 19, pp. 384-389, Mar. 2000. 12.

(13)

數據

圖 1-3、變數順序對 BDD 大小的影響  這個 n = 6 個變數的布林函數以&lt; x 1 , x 2 , x 3 ,  x 4 , x 5 , x 6  &gt;的變數順序做轉換時,得到的 BDD 大小為 8 = n + 2﹙個端點﹚,相當於 O(n)的數 量,但是若以&lt; x 1 , x 3 , x 5 , x 2 , x 4 , x 6  &gt;的變數順序 表示原函數時,將會得到含有 16 = 2 n-log n   個 端點的 BDD,其大小﹙端點數量﹚變成指數 大小。在處理上就極
表 2-1、在  Ultra 1 – 140 (UNIX System V Release 4.0)上面執行 BDD 最小化演算法的結果  電路  輸入數  最小 Drechsler 之演算法[9] 我們的新方法計算時間(秒數) 變數順序之數量  名稱   size  的計算時間(秒數) 最大值  平均值  最大值  平均值 cc 21  46  753.3  2.92 0.7  12 2  cm150a 21  33  3858.8  0.39 0.31  1  1  cm162a 14  30  4.2
表 2-3、在 Pentium IV - 1.4GHz 128Mb, Windows 2000 + Cygwin 上最小化各個電路的結果  電 路 名 稱  輸入數  n  全部產生了多少個變數順序(n2)  最小 BDD 的 size 其中失敗(逾時 300秒)了多少次  最小的 BDD 是在第幾次發現的  apex6.blif 135 18225  490  0  604  apex7.blif 49  2401  214  0  4  b9.blif 41  1681 97  0  10  bigke
表 3-1、新舊方法所得到的 BDD size 之比較﹙” - ”表示未知最小 size﹚  電 路 名 稱  輸入數  n  新方法找到的最小BDD 之 size  以前文獻所知的最小 size[8] 改進 比率  Fabio 網站[13] 上的最小 size  改進[13]的比率 apex6.blif 135  490  622 21.2% 498  1.6%  apex7.blif 49  214  -  b9.blif 41 97     -    bigkey.blif 486  1565  15

參考文獻

相關文件

在 abelian group 最好用的性質就是其每個 subgroup 都 是 normal subgroup, 所以每次碰到有關 abelian group 的性質時, 我們都可先找一個 nontrivial subgroup 再利用其為

一、下表為一年三班票選衛生股長 的得票結果,得票數最多的為 衛生股長,請完成表格並回答 問題(○代表票數). (

每一個泰國年輕男子一生中必須出家做一次僧人,這可是人生中最重要的

明龍計算一題兩個數相加的數學題目,不小心算成了相減,所得到的答

• 我們通常用 nD/mD 來表示一個狀態 O(N^n) ,轉移 O(N^m) 的 dp 演算法. • 在做每題

應用閉合電路原理解決生活問題 (常識) 應用設計循環進行設計及改良作品 (常識) 以小數加法及乘法計算成本 (數學).

每個 zone 交由一部 name server負責的作 法會有一個問題,萬一這個 name server 當 掉,可能造成 Internet上其它機器無法取得屬 於這個 zone 的資料(就是 domain name

• 円円想在一條筆直的路上開設一些漢堡店,已知他取了N個等間