日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据流分析之WorkList Algorithm

發布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据流分析之WorkList Algorithm 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

(1)如何求解數據流方程?

(2)WorkList Algorithm


(1)如何求解數據流方程?

不論是Reaching Definition Analysis中對可達定義集合的求解,還是Liveness Analysis中對活躍變量集合的求解,本質上都是在解方程。

以RDA舉例,其數據流方程如下:

可認為每個指令都對應方程中的兩個變量,即IN(p)和OUT(p)。為了減少變量個數,把(1)式帶入(2)式,以去掉IN(p):

此時方程中的變量為,而和則屬于常數,因為其值隨著指令的確定而相應確定。

此外,方程還有一個初值,即,

轉化為OUT,

?

為了說明求解思路,先用更簡化的符號來表示上述方程:

通過此方程可以看出,數據流方程的一個重要特點就是,待求的每個未知數既是若干方程的自變量,也是某個方程的因變量。


從此特點出發,我們很快發現一種求解的思路,即先給定一組未知數的初始值如,接著將這組值帶入上述方程,得到又一組未知數的值,如果與相等,則說明找到了一組方程的解,因為這組值可讓上述方程成立。如果與不相等,則重復上述過程,一定能找出方程的一組解。原因如下:

?

對于RDA,自變量越大(即集合的基數越大),根據方程,其因變量也相應越大。

由此可知,上述方程中的函數都是單調不減的,即如果,則有

,即

要讓解集合隨著迭代的進行而越來越大(即集合的基數越大),還需要一個初始條件,即

如果令,則有

此時初始條件和函數單調性共同作用,有如下鏈式反應:

由于是離散值(集合)且有上界(集合元素有上限),因此上述鏈式反應一定會終止,終止時會有

,這即為方程的一組解。

?

(2)WorkList Algorithm

上述思路對應的算法為Round-Robin Iterations,即各未知數的迭代次數(or更新次數)保持同步,即算法每次循環結束后都有

,而WorkList Algorithm則不同,其未知數的迭代次數不一定同步,在算法每次循環結束后可能會出現

,這說明針對未知數的值的更新,WorkList Algorithm有一套優先級規則。(其實這兩種更新思路與數值分析中求解線性方程組的Jacobi迭代和Gauss-Seidel迭代有共通之處)

?

先給出WorkList Algorithm的(不規范的)偽代碼:

WorkList()for i <- 1 to n doy[i] <- { } //初始化隨具體情況而定w <- [ y[1] y[2] ... y[n] ] //將未知數放入worklist中while(!is_empty(w)) do y[i] <- extract(w) //從worklist以某種方式抽出一個未知數old <- y[i] //記錄此未知數的值y[i] <- f_i(y[1], y[2], ..., y[n]) //挑出以此未知數作為因變量的方程,并進行運算,結果賦給此未知數if old != y[i] then //如果未知數的值在運算后發生變化for y[k] <- dep(y[i]) do //將依賴它的那些未知數放入worklist中,a依賴b的含義是//以a為因變量的方程使用b作為自變量,因此當b發生變化,a也就可能發生變化//故把a放入worklist中w <- insert(w, y[k])

未完待續

總結

以上是生活随笔為你收集整理的数据流分析之WorkList Algorithm的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。