使用編譯器報告來診斷最佳化機會

您可以使用 -qlistfmt 選項,以 XML 或 HTML 格式產生編譯器報告。 它提供如何最佳化程式的相關資訊。 您也可以使用 genhtml 公用程式,將現有的 XML 報告轉換成 HTML 格式。 此資訊可協助您瞭解應用程式碼並調整程式碼,以取得更好的效能。

可以在支援 XSLT 的瀏覽器中檢視 XML 格式的編譯器報告。 如果您使用 stylesheet 子選項 (例如 -qlistfmt=xml=all:stylesheet=xlstyle.xsl) 進行編譯,則報告包含呈現 XML 可讀取之樣式表的鏈結。 透過閱讀報告,您可以偵測到進一步最佳化程式碼的機會。 您也可以建立工具來剖析此資訊。

依預設,報告的名稱為 a.xml (代表 XML 格式) , a.html (代表 HTML 格式)。 您可以使用 -qlistfmt=xml=filename-qlistfmt=html=filename 選項來置換預設名稱。

行內報告

如果您使用 -qinline-qlistfmt=xml=inlines-qlistfmt=html=inlines-qlistfmt=xml-qlistfmt=html其中之一進行編譯,則產生的編譯器報告包括編譯期間的行內嘗試清單。 報告也會指定嘗試的類型及其結果。

對於編譯器嘗試列入的每一個函數,都會指出列入是否成功。 報告可能包含指定函數未順利列入的任何原因數。 這些原因的部分範例如下:
  • FunctionTooBig-函數太大而無法列入。
  • RecursiveCall -函數未列入,因為它是遞迴的。
  • ProhibitedBy因為使用者指定的 pragma 或指引,未執行使用者列入。
  • CallerIsNoopt-未執行列入,因為呼叫程式編譯時沒有最佳化。
  • WeakAndNotExplicitly列入-呼叫函數弱且未標示為列入。

如需可能的 原因的完整清單,請參閱 /opt/IBM/xlf/16.1.0/listings/ 目錄中 XML 綱目說明檔 名稱為 XMLContent.htmlInline optimization types 一節。 說明檔的日文及中文版本 XMLContent-Japanese.utf8.htmlXMLContent-Chinese.utf8.html也包含在此目錄中。

迴圈轉換

如果您使用 -qhot 以及 -qlistfmt=xml=transforms-qlistfmt=html=transforms-qlistfmt=xml-qlistfmt=html其中之一進行編譯,則產生的編譯器報告包括在編譯期間對檔案中所有迴圈執行的轉換清單。 報告也會列出在某些情況下未執行轉換的原因:
  • 迴圈無法自動平行化的原因
  • 無法解除捲動迴圈的原因
  • SIMD 向量化失敗的原因

如需可能的轉換問題完整清單,請參閱 /opt/IBM/xlf/16.1.0/listings/ 目錄中 XML 綱目說明檔 已命名 XMLContent.htmlLoop transformation types 一節。

資料重組

如果您使用 -qhot-qlistfmt=xml=data-qlistfmt=html=data-qlistfmt=xml-qlistfmt=html其中之一進行編譯,則產生的編譯器報告包括在編譯期間對程式執行的資料重組清單。 以下是資料重組的部分範例:
  • 陣列分割
  • 陣列聯合
  • 陣列交錯
  • 陣列換位
  • 共用區塊分割
  • 記憶體合併

對於其中每一個重組,報告包含資料名稱、檔名、行號及區域名稱的詳細資料。

設定檔導向的意見回饋報告

如果您使用 -qpdf2-qlistfmt=xml=pdf-qlistfmt=html=pdf-qlistfmt=xml-qlistfmt=html其中之一進行編譯,則產生的編譯器報告包括下列資訊:
  • 迴圈反覆運算計數
  • 封鎖及呼叫計數
  • 快取遺失 (如果使用 -qpdf1=level=2編譯)