2009年1月18日 星期日

進度報告 - Simulator

08/11/17
投影片









這禮拜survey的主題是IBM Full-System Simulator
主要是根據[Performance Analysis with the Full-System Simulator]這一份document來報告
同時參考了[IBM Full-System Simulator User's Guide]
[Using Systemsim to Guide Application Transformation and Tuning for the Cell Broadband Engine]

前兩份是Systemsim 3.1的內附文件(但內容是依照3.0版寫的)
第三份是來自IBM Austin Research Laboratory的投影片(Systemsim 1.1.1版)
後面附了兩個龐大的例子,可是一堆程式碼也沒說要放在哪裡用,
暫時我還參不透

這禮拜花了太多時間在安裝systemsim上面
我現在安裝的是Fedora 9搭SDK 3.1
網路上查到的大多是Fedora7搭SDK3.0
照理說SDK 3.1也發行半年了 應該沒什麼問題才是
可是我裝到最後 command line可以用 但GUI就出不來
具體的說 是出現一個空視窗 該有的樹狀目錄跟按鈕全都不見蹤影
好像是BLT的問題 可是BLT的版本又是對的
cellsdk verify的結果也是該裝的RPM都裝了
不知道是哪裡出了錯 論壇裡有人碰到了跟我一模一樣的問題
(11/9發的 至今還沒有回應)
http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14163015

在我硬是重裝BLT後
錯誤訊息變成了Segmentation fault on address 0x8 更糟
所以 這禮拜還會再花一點時間試試看
如果我能搞定的話 再把安裝過程貼上來

不過就算安裝成功 也只是看到simulation的結果
對於它內部是如何模擬CBE架構 取出要trace的資料 還是沒有什麼概念

--------------------------------------------------------------------
--------------------------------------------------------------------

08/11/19
這兩天試的結果 在原本的安裝步驟後
"再"install tcl跟blt一次 然後ulimit -s unlimited
這樣 gui就可以成功出現 但關閉時仍會有[程式記憶體區段錯誤]的訊息
(在兩台不同的電腦都是相同情況)










BUT 只有在一個BE的時候OK 如果執行[開兩個BE]的tcl檔
那出來的GUI還是一樣是空視窗 沒有目錄及按鈕
這樣的狀況 目前還沒有查到解法

--------------------------------------------------------------------
--------------------------------------------------------------------

08/12/01
這禮拜跟學長討論一下 要怎麼開始寫程式
因為有cross-compilation的問題 所以我得先研究一下ELF的格式
這裡是我這次的投影片
內容不多 只是講ELF的結構

關於IBM simulator 因為這禮拜都在趕作業
沒有繼續去查simulation的cycle mode為什麼跑不起來
不過 我發現 simulation開fast或simple mode
SPU的pipeline mode 是可以跑的
可以看到詳細的statistics跟visualization的圖表 只是時間恐怕不準
(要產生數據資料SPU必須開pipeline mode
時間要準simulation還是得要cycle mode)
我還要再研究一下它那些mode之間的關係

另外 開始寫simulator的文件了
目前只有[安裝]跟[上上禮拜的啟動與載入程式]
雖然使用上還有很多東西沒搞懂
可是不先寫下來我怕以後全都忘記了
這禮拜的進度就是這些
--------------------------------------------------------------------
--------------------------------------------------------------------
08/12/03
昨天上課的時候 老師有提出一個問題
「為什麼要自己寫simulator 不拿現成的QEMU來改」
我問過學長後 是因為QEMU有support整個linux 比較複雜
而且QEMU並不支援cycle 不符合我們的需求
然後 因為距離期末時間只剩6周
學長也訂了這樣的時間表
week1 弄懂instruction
week2~3 簡單版 simulator
week4 簡單版 multi-core
week5~6 快速版 multicore

我想說 在這邊昭告天下 也許我會寫的快一點吧
剩下的就是對自己的期許了...
不能被別的lab比下去捏
(ps.楊中平教授果然是很嚴謹的教授呢 讓我有些招架不住)
--------------------------------------------------------------------
--------------------------------------------------------------------
08/12/22
這禮拜剛完成一個core的instruction set simulator
(說穿了只是有實做memory的disassembler而已)
  • 指定要讀的程式(ELF檔)
  • fetch指令(同時load text, data 進記憶體)
  • 利用迴圈一次執行一個指令
就這樣 這幾個禮拜花了太多時間在指標跟記憶體位址的關係上
前天還連續寫了10個鐘頭卻沒有進展 =.=
現在有一點概念了 不怕
現在再研究多個core的時候 在執行時的同步問題
現在...應該是各個core有自己的instruction memory
可是在執行時會參考到同一個data memory
當大家都讀/寫同一個地方時 會有資料的一致性問題
(還是該稱作race condition問題)
(這是我在想啦 還不是很有概念)
所以說以後要跑的程式 在寫的時候就該指定好要給哪幾個core去跑
在編譯時就針對各個core各自編指令囉
然後就是各個core之間的同步 讓最後記憶體裡能有正確的結果
應該是這樣吧
這禮拜要研究的就是 上面說的那些 要怎麼去實現...
(時間還剩三個禮拜 應該是來得及吧)
--------------------------------------------------------------------
--------------------------------------------------------------------

09/01/19
一下子 三個禮拜就過去 前一篇已經是去年的事了
轉眼間已經是期末
所以即使做的不好也要有個階段性的ending了
結果是來不及加速 只能做到多個core分享資料而已
這一次的投影片內容
是個很簡單的multicore simulator實作
懶得看投影片的人不用怕 我也把大致的內容寫在下面
(可是欄寬真的太窄 所以一直換行 請見諒)
架構:
一共有5個core
core0 負責做同步的動作
程式中運算的部分則交給core1~4負責
每個core有自己的local storage

可直接讀寫自己的LS
每個core還需搭配一個mfc

在core之間傳遞資料必須透過mfc來完成
給我換行!!! 為什麼要一直縮回去!!
功能:
範例程式[矩陣相乘]
運算結果為一4x5的矩陣

在程式中宣告4個大小為5的陣列
並指定core1~4分別算出第1~4列
存入對應的陣列中
(core1 計算第一列 存入陣列1中)
同時 在程式中宣告4個flag 分別對應core1~4
當core1~4計算出結果後

呼叫mfc_put(core_id, address, size)函式
以通知core0
並將運算結果傳給core0

製作:
程式中包含[elffile], [disasm],
[core], [mem], [mfc], [bus] 6個class
主程式中宣告1個bus及5個core
並將bus指標丟進core中

在每個core的初始化中
// 將LS傳入共用的bus中
//讓bus可以看見所有的LS
bus->mapping(core_id, mem);
你也是~ 換行!!!!!
// 將LS及共用的bus傳入
// 以設定mfc可透過bus來存取別人的LS
mfc = new Mfc(mem, bus);
([bus]內含5個[mem]指標)
([mfc]內含1個[mem]及1個[bus]指標)
c程式經過compile後產生elf執行檔 由[elffile]解讀
再將instuction及data載入[core]的[mem]中
執行到呼叫mfc_put(core_id, address, size)指令時
從stack中抓出所傳的參數
再依這些參數指揮MFC做對應的動作
這樣就能在不同core之間傳資料了
--
(補遺)
換行!!
補上前一個禮拜的內容
架構上是一樣的 但是實現方式不同
我原本是想說 application那邊沒辦法告訴core
"何時"且"如何"存取別人的Local Storage
你為什麼不換行
所以讓每個core(硬體)自己handle一個flag
表示所載入的instruction是否已執行完
再讓core0去其他core那邊拿資料
當然 如何取得資料還是一個問題
但因此core變成"主動"去別人那邊存取
而不是單純的執行instruction
讓我空一行是會怎樣
像這樣的同步動作 不該是硬體在做
core負責的只是讀指令並一行一行的執行
core並不知道自己在幹嘛
flag的維護及同步動作的執行
應該是programmer的任務 在application那邊做好
會佔去你伺服器很多空間嘛??
至於要傳入MFC的記憶體位址要如何取得
是問過學長之後 才知道這個辦法
在application端加入一個空白function (mfc_put)
在執行到 call mfc_put 之前 會先將參數存進stack
又因為每個core拿到的是同一個執行檔
有相同的變數 所分配到的記憶體位址也相同
MFC access所需的來源位址跟目標位址
用同一個變數的位址就好
這樣就可達到"在application端做同步"的目的了
--
simulator :
模擬出硬體環境包括core、MFC、bus...等,訂出各元件的溝通機制。
core :
單純的依照目前的PC值讀出instruction並執行對應的動作,至於程式執行到哪了,是否執行到最後一行程式了...這些,core通通不知道。
application :
要用到幾個core、每個core要做什麼事、core之間如何做同步...等,都是由application決定。所謂"資料是否同步"只對application有意義。

21 則留言:

Zhong-Ho Chen 提到...

加油~ 弄起來之後, BBB就有新玩具了

逼逼逼 提到...

學弟慢慢來,
肝要是壞了,人生就是黑白的。
把個咩,趕個人生的進度。運動一下,看看外面的世界多麼遼闊。

慢慢來唷~

87showmin 提到...

趕人生進度時小心別著涼了。btw 要多運動是真的 ...orz

SCREAMLab 提到...

不錯, 各位很關心學弟.

他的是Multicore, or single core? GUI出來了嗎? 他的simulator有source code 嗎? 假如沒有, 那學弟該怎麼做下去?

是參照Aaa的RISC32 simulator做一版但加上如他們的功能嗎? 還是先做一點簡單的工作. 請Aaa來說一下.

yl 提到...

bbb都只跟"家"人運動
都不來跟我們運動了...

Zhong-Ho Chen 提到...

要先Know What才能Know How
然後在看怎麼去達到我們需要的功能?

逼逼逼 提到...

最近身體欠安,每天都被痛醒。
等好了再給你們電囉...

SCREAMLab 提到...

sorry, 我沒看仔細, 還沒裝起來. 加油.

跟大家一起打球吧!

yl 提到...

如果是受傷,還是去看醫生比較保險一點
不然,老了就很麻煩了~~

匿名 提到...

ㄚ凡這樣不錯, 有新東西就更新, 再更改新的發布日期, 這樣我可以經常看到你的進度與努力, 你看大家都很關心你.

我一陣子就會念念你們, 不一定是說你們對現在做的東西不努力, 而是你們還有哪裡可以進步的地方, 你們可以問問DNA, 他可是常被我念, 只是你們不知道, 上次他的Paper我連改都沒改就扔回給他要他重寫.

加油!

逼逼逼 提到...

哈囉~~希望學弟在寫文件的時候,是不是可以附個圖~ 以後我們寫書會用到你寫的文件。
感謝你~~~~

SCREAMLab 提到...

BBB以前研究過ELF, 可以向他問, 還有BBB以前有這方面的powerpoint嗎? 有的話可以給學弟整理後再post上來嗎?

逼逼逼 提到...

之前有做,似乎放在我家的PC~
等我有回高雄再找找看。

alandai 提到...

恩 我現在是先寫文字
等到寫得差不多了再來抓圖
這simulator使用上還蠻複雜的
沒有搭配圖的話恐怕看不懂

匿名 提到...

我跟Aaa談過, 我們先做一種架構, 也就是cell的架構, 至於shared memory所會造成的問題等這版到一段落再說.

我們預計把這cell simulator的使用也放在書裡, 要請你多費心.

逼逼逼 提到...

聽阿凡說在還沒有硬體出來的時候,IBM所有的測試都是在這Full Simulator上。所以這可能有很值得去使用的寶藏?

SCREAMLab 提到...

你預計的multicore的架構定了嗎? 期末了耶! 你的課程期末Project怎麼辦? 還沒的話要問一下Aaa. 下星期上來說.

匿名 提到...

阿凡:

你還記得meeting時你報告時是怎麼被K得滿頭包的嗎? 把你哪裡做不對, 我們跟你講要你修正的部分講清楚. 這是很重要的概念, 你要好好紀錄你自己的研究歷程, 一絲不苟比較好.

alandai 提到...

剛剛補上去了

另外 有人知道為什麼每次編輯的時候空一行 存檔完後空的那行就被吃掉 然後 一加入圖片 整篇文章的每一行之間都多空一行嗎 還是我編輯的方法不對?

匿名 提到...

你用Livewriter應該就可以了, 要不然在html裡加上
也行.

你的report其實沒有把你之前錯在哪裡顯示出來. 因為你犯的事一個很嚴重的觀念上的錯誤, 所以我希望你寫清楚, 以後你與後人才不容易再犯.

感謝!

匿名 提到...

sorry, 補一下.

也就是simulator, core與application的腳色關係.