Simplescalar/ARM模擬器安裝與測試
裝這模擬器純粹是老闆要我安裝給他跑而已...
本人對這模擬器沒說很瞭
有任何問題請留言討論,但別期待能幫上什麼忙...
本人對這模擬器沒說很瞭
有任何問題請留言討論,但別期待能幫上什麼忙...
- 下載Simplescalar/ARM
網址: http://www.simplescalar.com/v4test.html
直接下載網址: http://www.eecs.umich.edu/~taustin/code/arm/simplesim-arm-0.2.tar.gz - 下載Mibench ARM
網址: http://www.eecs.umich.edu/mibench/
直接下載網址: http://www.eecs.umich.edu/%7Ejringenb/mibench/mibench_arm_binaries.tar.gz - 解壓縮simplesim-arm-0.2.tar.gz
$ tar zxvf simplesim-arm-0.2.tar.gz - 進入解壓縮後的目錄
$ cd simplesim-arm
PS. 官網上的安裝使用說明文件: http://www.eecs.umich.edu/~taustin/code/arm/ANNOUNCE.ARM - 照上面的說明文件只要兩步驟,一個是設定環境、另一個是make
$ make config-arm
$ make - 沒意外的話應該會發生點錯誤,不然也不用寫這篇文章了...
在最後面應該會看到提示字元 => make: *** [sim-safe.o] Error 1
往前捲動一下會看到真正錯誤的來源 => machine.h:349: 錯誤: 陣列元素的類型不完全
其他的錯誤都只是一些副效應 => machine.h:349: 錯誤: 陣列元素的類型不完全
觀察一下349行附近的敘述
$ gedit machine.h &
發現敘述內容為 => extern enum md_opcode md_mask2op[];
往下面幾行會看到上面用到的列舉型別md_opcode,宣告在354-363行間,敘述如下
/* global opcode names, these are returned by the decoder (MD_OP_ENUM()) */
enum md_opcode {
OP_NA = 0, /* NA */
#define DEFINST(OP,MSK,NAME,OPFORM,RES,FLAGS,O1,O2,O3,I1,I2,I3,I4) OP,
#define DEFUOP(OP,NAME,OPFORM,RES,FLAGS,O1,O2,O3,I1,I2,I3,I4) OP,
#define DEFLINK(OP,MSK,NAME,MASK,SHIFT) OP,
#define CONNECT(OP)
#include "machine.def"
OP_MAX /* number of opcodes + NA */
};
把354-363敘述搬到列舉宣告前就可以了,修改完後存檔在重新make一次。
$ make - 過一會肯定又是眉頭一皺,事情果然並不單純...出現以下錯誤
/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in eval.o
/lib/libc.so.6: could not read symbols: Bad value
collect2: ld 回傳 1
make: *** [sim-safe] Error 1
查看eval.c檔案
$ gedit eval.c &
發現83-85行的敘述
#if defined(__CYGWIN32__)
#include
#endif
但仔細查看Makefile或其他*.h檔案中都沒定義這巨集變數__CYGWIN32__,自然errno.h會被忽略,但程式碼中用到錯誤常數需要此標頭檔定義,所以把83跟85刪掉即可。
再重新編譯
$ make - 肯定想飆髒話了,出現以下錯誤
/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in range.o
/lib/libc.so.6: could not read symbols: Bad value
collect2: ld 回傳 1
make: *** [sim-safe] Error 1
此時請查看range.c檔案
$ gedit range.c &
找到81-83行的敘述,跟前一個eval.c的問題一樣,把兩行假指令刪掉即可 - 在重新編譯
$ make
這次可跑比較久了,心中肯定暗爽結束了結束了,就快要編好了,結果伸個懶腰回神一看,下面訊息...
make: *** [sim-outorder.o] Error 1
心中肯定充滿無限#@^%&(*&^%#
想捶牆壁又怕手會痛,實在很無力... - 其實就剩下gcc版本問題了
查看一下自身gcc版本會發現是4.X
$ gcc -v
裝一個3.X版的gcc就可以了
$ sudo apt-get install gcc-3.4
如果上述指令安裝失敗請先安裝
$ sudo apt-get install gcc-3.4-base - 安裝完畢後修改Makefile,設定CC使用gcc-3.4即可
$ gedit Makefile &
應該在177行敘述為CC = gcc
改成CC = gcc-3.4即可
這次應該就OK了,下make去編譯吧
$ make - 編完後測試一下,先回到上層目錄
$ cd ..
解壓縮mibench_arm_binaries.tar.gz檔案
$ tar zxvf mibench_arm_binaries.tar.gz - 先把剛剛編譯完的模擬器(這裡示範用sim-outorder,每個模擬器之間的不同請參考官網上的說明)複製到mibench目錄下
$ cp simplesim-arm/sim-outorder mibench_arm_binaries - 進到mibench的目錄下進行模擬測試
$ cd mibench_arm_binaries/
$ ./sim-outorder bitcount/bitcnts.arm 150000 - 應該會看到類似下面訊息
sim: ** simulation statistics **
sim_num_insn 99409825 # total number of instructions committed
sim_num_uops 149104246 # total number of UOPs executed
sim_avg_flowlen 1.4999 # uops per instruction
sim_num_refs 24470769 # total number of loads and stores committed
sim_num_loads 14563043 # total number of loads committed
sim_num_stores 9907726.0000 # total number of stores committed
這些就是模擬的數據結果,再依據所需觀察各個數值吧
4 則留言:
版主你好
我試著下載simplescalar官網上的simplescalar/ARM
(http://www.eecs.umich.edu/~taustin/code/arm/simplesim-arm-0.2.tar.gz)
可是出現forbidden的頁面
請問這個source code是否需要申請之類的動作才可取得?
打擾了
檔案已經被刪掉了
我把之前下載的檔案放在網路空間
如果有需要請自行下載,連結:
http://dl.dropbox.com/u/3810580/simplesim-arm-0.2.tar.gz
太感謝了 :)
在安裝GCC3.4版時出了問題耶。
系統持續顯示"無法找到套件GCC-3.4"
張貼留言