2009年2月13日 星期五

2009/2 Training course: Cell Programming

這幾天有學弟問我的問題,我稍做整理
1.
問:假如 SPU3 要用mfc_put 把資料丟給SPU4,
我再SPU3裡面這樣寫,
mfc_put(&myps , XXX , sizeof(my_class) , TAG , 0,0);
XXX要放SPU4的 (local store位址) + (變數位址)
我知道local store的位址從problem state可以得到
可是我再SPU3裡面要怎麼抓到SPU4的變數位址呢?
答: 對,這是一個問題,所以你必須在SPU4的code加入"告訴SPU3 它該放在我的Local Store的哪一個address"意思就是你應該在SPU4的Local Store開一個一模一樣的變數,然後用mailbox或signal告訴SPU3這個變數的addr, 叫SPU3將資料傳到這個addr

2.
問:while(spe_out_mbox_status(spe_id[0])==0);
這段code的意思是說SPU0如果他的outbound傳輸是傳給SPU0的話,
就會一直被這個while 迴圈block住嗎?
答:其實是可以直接使用spe_out_mbox_read(),但是有時會出錯,為什麼呢?因為ppe去讀spe的outbound-mailbox是"non-blocking"。所以有可能spe根本還沒把資料寫到out-bound mailbox,但是你卻跑去讀了,所以會得到錯的值。為了預防這樣的錯誤發生,所以我們要去看out-bound mailbox的status,當status的值不是0的時候,代表有資料進來了。而因為你去讀status也是non-blocking,所以要用while loop一直去偵測,直到它不為零。

3.
問:Fenced and Barrier Command
Fenced command: mfc_putfBarrier command: mfc_putb
在每一個SPE當中,會有一個DMA queue,所有要做DMA的command,都會進到這個Queue當中等待執行。但是先送進去DMA不一定會先執行。如果資料送出的先後順序對我們來說是有意義的,但我們又不想要每送一筆就blocking的在等待,所以我們就必須以fenced和barrier command來幫忙將想要資料送出。
於是我們將想要依序的資料用相同的標籤(TAG)標記,然後使用barrier/fencedcommand 將資料送出。
barrier:跟我同樣TAG的DMA指令,比我早進來DMA Queue的指令先做完,才會輪到我做。fenced:跟我同樣TAG的DMA指令,比我早進來DMA Queue的指令先做完,比我後進來指令也可能會先執行,之後再輪到fenced指令去做。

2009年2月11日 星期三

2009/2 Training Course

請 Speakers儘快上傳你的講稿資料

2/9 SystemC - DNA

2/10 SystemC - DNA

2/11 SLIM - 宗胤

2/12 Cell - bbb

2/13 Eclipse - 宗胤、阿凡

上面是Training Course課表

地點皆在4285,時間 9:00~12:00、14:00~17:00

基本上皆是早上講課,下午則是一些實作練習

歡迎各位來參加

另外請主講人在2/6前上傳投影片等資料


資料下載:

SystemC & TLM

SLIM Slide SLIM Source 作業注意事項

Cell Slide Example Source 作業(有修正請重新下載)

Eclipse Slide Example

GEF Slide Lab

2009年2月10日 星期二

2009新春

照片在此!!

附上親子圖一張

推薦書

Hi 老師及各位學長學弟妹們:

推薦兩本程式實作的好書:

1) Head 1st Design Pattern
http://supersmalldolphin.blogspot.com/2008/06/head-first-design-pattern.html

2) Effective C++
http://www.books.com.tw/exep/prod/booksfile.php?item=0010264536

第一本可幫助寫出具良好架構易維護的程式,第二本提供許多c++建議讓程式更快且避免錯誤的產生。
如果你/妳尚未閱讀過這兩本書,建議將他們當成打發時間的好朋友…
若有問題歡迎留言或寫信給我。

Thanks.

AL.