評價模擬器
在介紹模擬器種類時有和大家科普模擬器根據目的不同會有不同的實現方式,而這些實現方式也會影響模擬器的模擬速度,模擬經度,模擬準確度等,因此在最後下了一個結論:要評價模擬器是很難的。
而其實在過去也有學者思考過這個問題,在A Survey of Computer Architecture Simulation Techniques and Tools一文中就有提到這個現象,同時他提出了六大指標可以用來評價模擬器的好壞,而今天由於要搭夜車南下,比較沒有辦法像原先計畫的建立環境,正好就來向大家介紹分為哪六種指標。
評價模擬器的六大指標
Eeck hout將模擬器分為下列四項來進行評價,分別為準確度(accuracy), 執行時間(evaluation time), 開發時間(development time)及覆蓋率(coverage),而Ayaz Akram在此之上提出了用來評價模擬器的六大指標,分別為準確度(accuracy), 執行效能(performance), 模擬精細度(level of details), 開發者友善度(easiness of development), 開發彈性 (flexibility)以及 使用者友善度 (user friendliness).
Spike, QEMU, Gem5
我們可以試著套用Ayaz Akram的六大指標來分析前面提過的三種模擬器/仿真器,以下取每項的頭文字作為簡稱。事先聲明,這個部分是筆者個人的想法與使用經驗,如果有讀者覺得認知有所出入的也歡迎在底下留言讓我知道,考量到上述六點,我會給Spike, QEMU, Gem5這三種模擬器以下的評價
Spike : 準確度A-,執行效能P+++,模擬精細度L-,開發者友善度E+++,彈性F,使用者友善度U+
Spike作為Risc-V官方的模擬器,除了因為是功能模擬器而註定沒辦法準確度太高外其他部分都有不錯的評價,特別是他將每個指令分別單個標頭檔的形式區分開來的形式對於開發者來說可以很方便的新增指令,且也支援基本的debug,倒出log等功能,但由於Spike開發的時間較早,因此會有像是BBL,RISC-V fesvr等後續可能被OPENSBI等取代的功能。
QEMU : 準確度A-,執行效能P+++++,模擬精細度L-,開發者友善度E,彈性F+,使用者友善度U++
QEMU同樣的由於是仿真器,因此注定在準確度、精細度上會稍差一點,但其在執行速度上的優越表現足以彌補這部分的缺點,而且QEMU本身支援多種不同的ISA,也能夠透過Option選擇MMU, No-MMU等選項,對於User來說無疑是功能相當強大的一套工具。而缺點也正是因為它太過強大,所以學習成本稍高,例如說今天想要在QEMU上新增一個指令時會需要考慮到要怎麼翻譯成對應的本機指令,開發難度較高。
Gem5 : 準確度A,執行效能P+,模擬精細度L+,開發者友善度E+++,彈性F+++,使用者友善度U+++
Gem5作為三者中唯一可以進行時間模擬的模擬器,無疑是在準確度、模擬精細度上要亮眼許多,而作為代價執行效能就遜色不少。不過Gem5本身有一套自己的ISA描述語言,可以很輕鬆的新增指令,且也具備相當大的彈性,內建的分支預測器、處理器架構、不同的記憶體類型對於使用者來說也相當方便,因此在友善度及彈性上有不錯的分數,同時Gem5還支援先前有提過的Checkpoint系統,可以快速地回到某個時間點進行模擬。
碎碎念 : 今天回老家所以稍晚更新,明天會依照計畫開始構思模擬器的規格及建立環境。