機器無關的優化
基於target 的優化
**生成
由於tvm中新增自定義硬體加速器的最後一步,需要llvm編譯器支援自定義pass,所以就大概看了下編譯原理,下面mark一下。
編譯可大概歸納為:前端->中間->後端,下面引用教程上的一張圖
剝去源程式中的注釋和空白符。
對程式開頭的巨集定義和檔案包含進行處理
產生用於語法分析的詞法記號序列。
parser讀取詞法分析器提供的記號流,檢查他是否能由源語言的文法產生並輸出分析樹的某種表示。
在看linux核心**的時候,經常會看到likely(x)和unlikely(x)巨集的使用。那這兩個巨集有什麼作用呢?
這兩個巨集在核心中的定義如下:
# define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0)
可見這裡使用了gcc的內建函式__builtin_expect()。
使用__builtin_expect (long exp, long c)函式可以幫助gcc優化程式編譯後的指令序列,使彙編指令盡可能的順序執行,從而提高cpu預取指令的正確率和執行效率。
__builtin_expect(exp, c)接受兩個long型的引數,用來告訴gcc:exp==c的可能性比較大。
例如,__builtin_expect(exp, 1) 表示程式執行過程中,exp取到1的可能性比較大。該函式的返回值為exp自身。
編譯原理 筆記
第一講 編譯過過程概述 主要介紹了 1 什麼是編譯是編譯程式?2 編譯程式的作用 3 編譯過程 4 編譯程式的組成及各部分的作用。第二講 上下文無關文法和語言 主要介紹了 1 語法 語義等概念,2 回顧了關於程式語言定義,初等資料型別,資料結構,高階高階語言的一般特性,程式結構,語句與控制結構等內容...
編譯原理筆記 一
編譯原理 1.1編譯器就是個程式,讀入某種語言編寫的程式,翻譯成另一種語言的程式。並能告知源程式的錯誤。1.11 編譯的分析綜合模型 編譯由兩部分組成,分析和綜合。分析部分將源程式切分成一些基本塊並形成源程式的中間表示,綜合部分把源程式的中間表示轉換成目標程式。分析期間 源程式的操作將被確定下來並表...
重點筆記 編譯原理
1 用組合語言或高階語言編寫的程式,必須先送入計算機,經過轉換成用機器語言表示的目標程式 這個過程叫做編譯 才能由計算機執行。執行轉換過程的程式叫做編譯程式。匯程式設計序是指沒有編譯過的組合語言原始檔。編譯程式轉換過的叫做目標程式,也就是機器語言。2 編譯程式是一種翻譯程式 3 通常乙個編譯程式中,...