23.07.2013 Views

Solutions Brief Title – 18pt - HP

Solutions Brief Title – 18pt - HP

Solutions Brief Title – 18pt - HP

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

[下一張投影片]<br />

若您想要對所收集的側寫資料進行微調,或者您的應用程式因為某種原因而無法收集側寫值,<strong>HP</strong> 編譯器有幾個<br />

pragma 選項,可以向編譯器指出,替程式碼假定是哪種類型的執行側寫。 第一個是估算頻率的 pragma,可讓<br />

您指出區塊的估算相對頻率,也可用來指出迴圈的平均反覆計數,我在這裡舉出了幾個範例。 第一個範例是一<br />

個 IF 條件,可以把 pragma 估算頻率放到那個 IF 條件的本文中,例如 99% 的時間會執行那個程式碼,因此<br />

99% 的時間當中 IF 條件為真,您執行了 IF THEN ELSE 區塊的本文。<br />

看到這個範例的第二部分,在 FOR 迴圈當中,我把估算頻率 pragma 設為 10,也就是告訴編譯器,這個迴圈平<br />

均重覆執行 10 次。 對呼叫套用的,另外還有兩個 pragma。 第一個是常被叫用的 pragma,第二個是很少被<br />

叫用的 pragma,它們也有相對應的編譯行選項可替代 pragma 使用,例如對引導內嵌會有所幫助。 如果編譯<br />

器知道某個特定程序經常被叫用,對於內嵌就能夠更加主動,反之若被指為很少被叫用,也是相同的道理。<br />

[下一張投影片]<br />

再下來我想要多談一點程序間的最佳化。 這是用 +O4 最佳化層級來啟用的,此外在 +O2 或 +O3 層級也可以<br />

用 -ipo 選項來啟用。 我剛才提過,可讓編譯器執行完整程式分析和程序間的分析。 若進行程序間的最佳化,<br />

會使您的物件檔案含有中間程式碼,而非物件程式碼中一般會看到的組譯碼,實際上會延到您將所有的物件檔案<br />

都聯結在一起之後才最佳化。<br />

這個選項可以用在您要套用程序間最佳化的所有檔案,或是部分檔案。 顯然對所有檔案使用 +O4 或 -ipo 可以<br />

收到最好的效果,因為這樣可以啟用整個程式的分析和最佳化,而最佳化工具若能看到完整的程式,功能會強大<br />

許多。 程序間的最佳化是設計成不需變更使用者的建置程序,所以即使物件檔案含的是中間程式碼,在您編譯<br />

程式碼時,還是照常經過一般的編譯聯結程序。 只是最佳化會延到聯結期間罷了。<br />

我們把程序間最佳化工具設計成對 Itanium 處理器來說非常具有擴充性、也非常耐用,不過相對地建置時間與磁<br />

碟空間的用量也會增加,例如因為物件檔案含有中間程式碼的關係。 另外一點注意事項是,若您要發行程式庫<br />

檔,便無法運用程序間的最佳化,這也同樣是因為物件檔案中含有中間程式碼,由於不知道使用者會怎樣用應用<br />

程式聯結進去,所以不能發行這些檔案。<br />

[下一張投影片]<br />

這張圖片是表示我們的可擴充 IPO 實作中,整體的建置模型。 在 IPO 之下,我提到的編譯器產生中間 ELF 檔 (<br />

稱為 IELF 檔),之後會傳遞到聯結器;在聯結期間,程序間最佳化工具就會取得所有這些 IELF 檔,讀入,再執行<br />

程序間的分析和內嵌。 那個最佳化階段完成後,編譯器會善用建置機器上可用的平行處理,並且以平行方式呼<br />

叫多個後端的實例,以實際執行編譯器的程序間部分,於是產生最終的二進位程式碼。<br />

[下一張投影片]<br />

那麼,程序間的分析和最佳化究竟有什麼用處呢? 以下我來就執行程序間最佳化時可用的幾種最佳化,一一地<br />

詳細說明。 首先是別名分析。 最佳化期間,編譯器能確實同時得知可執行檔所有部分的話,便能執行更多的主<br />

動別名分析,於是例如若在 +O2 或 +O3 層級使用 -ipo 標幟執行程序間最佳化,編譯器就會執行全域位址暴露<br />

分析,基本上也就能推論出是否能套用沒有指標指向全域的宣告。 而存在有 +Ono 指標指向全域選項;這只是

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!