2009年2月3日 星期二

安裝CUDA --- VC8

首先要到CUDA官網抓一下東西

選擇 Windows XP


將下面三個都抓下來, 抓2.0就好可以了
1. CUDA 驅動程式:
2. CUDA 工具套件:
3. CUDA 軟體開發套件(SDK):

放Tool Chain:
C:\CUDA\

範例放在這邊
C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\Projects
進到 Project 之後點VC的Project檔就可以開了

一些小問題:
Q1: 有多張顯卡時, 要選另一張顯卡, 可以傳參數 "-device=1"
Q2: VC Syntax Highlight可以看 ~SDK\doc\syntax_highlighting裡面的文件

Have Fun~

2009年1月20日 星期二

進度報告-Cell BE programming-塞公



報告一下我這禮拜看的DMA list

mbox ppe 部份測試只測了一些 進度有點慢

投影片在此

------------------12/08----------------------------


這禮拜主要是在寫程式碼部分


試著寫電腦音樂期末作業的程式架構


與已經將ps3灌好 並拍照存證





投影片在此


------------------12/15----------------------------


將 PPE 與 SPE 和 SPE 與 SPE 之間的 mail box 和 signal 傳輸

寫完並記錄

投影片在此

------------------2009/01/20----------------------------


將進度更新一下 離上一次更新日期看了都感到汗顏

主要是把進度做到一個段落了

有要做的部分大致上都有一些成果

這次投影片也是這禮拜二期末報告要用的(部分頁數)

投影片在此

2009年1月19日 星期一

ABS/OLA Sinusoidal Modeling

這篇全名為Analysis-by-Synthesis/Overlap-Add Sinusoidal Modeling Applied to the Analysis and Synthesis of Musical Tones,是1992年AES的Journal,主要精神在於Analysis-by-Synthesis,概念其實跟 codec 的 encoder 內部包 decoder 很像,它每一圈都會找一個新的 Sinusoid並加入,以致於原訊號扣掉這些Sinusoids後會最小,最後再依照這些Sinusoids來分析下次要找的參數。

image



本週我報告了ABS流程及公式推導,老師提出了一個問題。

在計算 least square error 時,ω 如果照 paper 上說的只是將每個frequency bin代進去看誰最小,這個動作不就跟做DFT一樣?如果該訊號的頻率介於兩個bin之間又該如何?

論文 p501 第(25)式說明他是用每個bin代進去算的,後面我還沒報告的部份裡有另一個主要觀念 Quasi-Harmonic Modeling 則只有調整 partials 的位置,但前題是 f0 要找得準,其他部份要全部看懂後才能確定它是否沒做特殊處理。

而老師提出一個解決此問題的方向…

image

既然公式中原本只對 a 跟 b 做微分取極值,我們可以對 cos(ωn) 與 sin(ωn) 先做 Taylor expansion 後對ω做微分取極值,極值不只一個解,先前我們可以知道ω落在哪些bin之間,以此做判斷選出正確的極值即可。

Download:  paper  slide

Dec. 9th. 2008 update

上次提到「ω 如果照 paper 上說的只是將每個frequency bin代進去看誰最小,這個動作不就跟做DFT一樣?」的問題,其實在論文上有說明 M 值可自訂,M 值 & Na(Analysis frame size) 與 SNR 的關係可在投影片上看到。之前之所以誤會成是 frame size 是因為 M 同時也是 DFT 的慣用標號,論文第三章的實作說明中只有一小句話有提到原始訊號轉 DFT 前需先 zero padding 到 M 的大小。

Download:  slide

Jan. 6th. 2009 update

今天回報已解決bugs及目前遇到的問題。投影片中有列出 4 個case,接下來打算先針對第二個case去找問題所在,這是沒有套用windows function,但FFT size有加長的結果,很明顯phase跑掉了。

image

Download:  slide

Jan. 13th. 2009 update

由於 revise 原本論文的算式已找不出錯誤,某天我翻出同作者在五年後發的另一篇論文:Speech Analysis/Synthesis and Modification Using an Analysis-by-Synthesis/Overlap-Add Sinusoidal Model,雖然這兩篇論文內容極為相似,不過我發現有部份算式不一樣,舊論文在推導MSE時使用

image

image

新論文則是用

image

換了新論文的算式,套上pure sine後結果很正確 (case 4-4),很開心的套用到 violin 第一個frame也正確,但跑到第四個frame時便找錯頻率了 (case 4-5)。也因為如此,找出了另一個主要問題。

論文在反推phase時是用 -arctan(bi/ai),這是因為公式的推導中會出現 sinφ/cosφ,但是,原本φ的範圍是介於 0~2π,arctan的結果卻只會落在 +-0.5π,導致當我們用 cos 去製造 sinusoids 時,phase的平移範圍太小,當這個frame起始的幾個samples值是呈現遞減趨勢時,phase的誤差會剛好差π。解決的辦法就是改用 Matlab 的 angle function。(case 4-6)

最後,實驗結果還是有phase的偏移,所以開始針對phase再開新的case來討論。目前的問題出在:在找第一個 sin 時是正確的,找第二個時 phase 便會出錯,可參考 case 5-2,第一個 sin 的frequency index落在 14, 15, 16,第二個在 17, 18, 19。中間的圖說明能量上跟原訊號是很完美的貼近,但下圖的 phase 卻跑掉,導致上圖的波形有所差異。

image

Download:  slide

2009年1月18日 星期日

2008畢業照

2008年, 我教的這屆學生要畢業, 其實我自這屆以後, 大學部我開的都是選修課, 所以跟學生的關係不再似以前一樣密切, 不過我在每屆學生畢業照之時, 一定會抽空參加.

DSC01122



這系的老師不知怎地, 不太參加學生的活動, 甚至連畢業照show up的老師也不多. 師生的關係疏離嚴重. 我想跟老師的研究升等壓力超大有關吧! 也怪不得老師們, 我見到系上的新老師通常來不到一年, 其氣色與健康就走下坡的很多, 這也令人憂心. 教育事業走到這一步, 不知道該怪誰, 不知道該怎麼說與怎麼辦?

話說2008畢業照, 一班在星期五 , 另一班竟然定在星期六, 星期五參加的人都少了, 星期六一定更慘. 我是周末一定要陪家人的, 何況內人星期六到北部開會, 留我一個人要搞定兩個孩子, 出門對我來說簡直是恐怖與不可能的任務. 所以我只答應星期五出現, 星期六的就抱歉了.

沒想到我星期五的時間記錯了, 一點記成兩點, 等跑到圖書館錢已經曲終人散, 沒辦法, 我又不想缺席任一屆的畢業照, 星期六上午硬著頭皮出門.

出門前先幫Diane與Joanne洗一下屁屁, 10點開始餵午餐, 10點45分出門. 10點55分到學校. 11點多一點與學生會合.

大家可以想像到學生驚訝驚喜的樣子, 因為我事前沒說, 而當天也確實沒其他老師出席, 學生失望之極可想而知, 但是突然有一個老師出現, 心情可想而知, 何況還多了兩個如花似玉的小女生.

所以大家爭相跟我們三人拍照, 可惜我家Diane靦腆到家了, 所以一直沒太多笑容, 但是學生的滿足我可以感受到. 我想這會是我以及這一屆學生永生難忘的畢業照.

真的, 其實做老師的多用一點心, 事情總是會不一樣, 就像這2008的搞笑畢業照一樣.

其實我的心裡面也多少帶著一點心酸.

DSC01121

這是我跟我的專題生的合照. Diane跟Joanne在拍照後, 我待開他們後就開始恢復頑皮了, 玩得起勁得很, 挖勒! 一直玩到下午三點半才回家. 除了他們高興之外, 我也真的佩服自己.

DSC01120

DSC01128

DSC01130

DSC01133

DSC01129

DSC01132

一個字, 猛啦!  ㄟ! 我是說Diane跟Joanne很猛, 不是我啦.

那天 !我累癱了.

進度報告 - 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有意義。

2009年1月16日 星期五

尾牙的季節到了: 決定版

尾牙地點就定在系館內, 請大家原諒老師今年比較拮据. 粗茶淡飯, 以迎佳賓. 請1/17, 星期六先到的人可以在實驗室或我的辦公室聊一下天.

經過幾輪討論, 雖然2/7是最多人的, 可是維城不能來, 我本來希望維城可以來分享一下到聯發科近半年的心得, 所以還是決定照常在1/17下午一點開始辦. 我請bff, keiko來講一下.



然後2/7再辦一次新春團聚, 到時請mobo, kiwi以及daphne來談一下. 因為2/7人多一點, 所以我們就以2/7那天再來交換禮物與抽獎.

請keiko與bff連絡一下在新竹與台北的學長姐如小路, 子欣與Alomst等, 看他們可不可以來. 小年說他會來, 請確認一下時段. 他算工作比較久的, 也請他來分享他幾年來的甘苦談, 順便給在學的人一點建議.

三個時段都不能來的學長姐, 我預計二月選一個周末到台北跟大家聚聚, 那時再來交換禮物, 一樣我會提供禮物來抽獎, 雖然各位可能會覺得老師的獎品太寒酸. 失禮了.

最後再一次說抱歉, 今年有點突槌. 明年會提早規劃.

 

先定1/17號. 下午一點開始, 這樣北部的學長學姊要來比較有充裕的時間.

但是假如有學長學姊1/17不行, 我們就在1/18再辦一場. 再不行, 2/7再來個新春團拜. 想三場都來的也一樣歡迎.

哇勒! 這會是有史以來最密集團聚的一年.

希望快樂小鈺實驗室從此幸福快樂.

要是有其他意見, 請趕快上來發言.

時間調查:

1/17

  • bff
  • aaa
  • centcent
  • Keiko
  • showmin
  • DNA
  • 阿凡
  • 塞公
  • bbb
  • Buffett
  • 皓鈞
  • 品皓
  • 冠廷
  • water(?)

1/18

  • bff
  • aaa
  • centcent
  • Keiko
  • showmin
  • DNA
  • 塞公
  • Buffett
  • 皓鈞
  • kiwi
  • 品皓
  • 冠廷

過年後 (2/7)

  • aaa
  • centcent
  • starryalley
  • mobo
  • showmin
  • Dawn
  • 阿凡
  • 塞公
  • bbb
  • Buffett
  • squid
  • 皓鈞
  • kiwi
  • 品皓
  • 冠廷
  • Rufus Chang
  • 育典
  • water

大家可以發表一下意見哪時候辦比較好嗎? 也請已畢業的學長學姐表示一下意見. 今年過年比較早, 過年前辦或過年後辦我也都沒意見.

老師今年辦事不力, 所以尾牙跟去年比起來, 獎品會有一點縮水, 看還是會意思意思一下. 請各位照往例準備一份禮物來跟其他人交換. 禮物重在心意, 希望是可以讓收到禮物的人了解你的體貼就好.

至於吃飯方式, 我再來想是找家餐廳省麻煩, 還是像上次在我家辦聚會一樣, 這點也請大家發表意見.

 

今天是2008年最後一天, 祝大家新年快樂, 學業進步,

2009年1月11日 星期日

進度報告 -品皓

====================1/12============================
本來在core interaction方面,我是認為應該由system controller和application來處理同步的問題
所以設計了兩個core在不同時間,透過Xram向對方send/recieve data。
藉由觀察xram的數值來判斷emulation是否正確。

可是和學長討論後,學長認為core interconnection的資料是否正確,應該由programmer負責。
也就是說software應該有一個機制判斷收到的資料是否正確。
core只單純的執行程式,不應該有什麼多餘的判斷功能,不然就不是正常的8051 core了。
所以在demo的時候,我設計了兩個簡單的程式,目的都是在搶share memory的使用權。
實作方式是把xram作為share memory,定一個位值為flag,
可用於判斷目前share memory是否被占用或者空著。

沒想到demo完後,楊老師反而比較贊同第一個方法,
也就是core interconnection應該由system controller和application來處理。
因為這是用一個core來模擬多core的行為,所以本來就應該比正常的core還多一些功能

到這裡我就比較混亂了,所以老師建議我多讀些有關multicore架構的paper。
之後對於share memory的架構設計上能夠更嚴謹點。

2009年1月8日 星期四

[c#] memory copy

以下文章我本來只貼在BBS,蘇cent請我貼在這裡,如果有錯請大家鞭小力一點。

c# 的 memory copy method 有三種常見的方式: Copy, CopyTo, Clone。而觀念主要分為兩大類,一類為 deep copy,一類為shallow copy。c# 的陣列或物件預設通通是「reference type」,所謂的 deep copy,就是重製了一個新的物件,然後將值通通搬過去。shallow copy則是建立一個新的reference,但指向的還是原本的物件實體。

http://www.discussweb.com/c-programming/966-copyto-clone.html
因此,這條thread講的東西便大有問題!其實是因為 MSDN 上的定義有講跟沒講一樣:

Copy    將一個 Array 中某範圍的元素複製到另一個 Array,並在必要時執行型別轉換和 Boxing。
CopyTo  將目前一維 Array 的所有元素複製到指定的一維 Array。
Clone   建立 Array 的表層複本 (Shallow Copy)。

可是事實上 ...下面這篇才是對的。
http://www.geekinterview.com/question_details/5653

做個總結:CopyTo, Clone是shallow copy,Copy是deep copy。

補充一個例子,這例子是從義崧二胡合成的程式節錄下來的。

image

這裡的 vis 是用 new 所產生,所以很直覺會以為 vis 會指向新的物件,然後再透過下一行的 CopyTo 將 gcdSums 的資料複製過來。問題出在,整段 code 中有出現 vis 變數的就只有這段了。。。(謎)

2009年1月6日 星期二

舉手答右: 小年

我是小年....
03年從實驗室畢業...
目前正在新竹工作...
比較懂的: Video compression
喜歡做的: 電影, 音樂, 書, 漫畫, 吃吃喝喝, 旅遊

ps:尾牙是什麼時候呢? 快快定案唄~

2009年1月1日 星期四

20090101 台南的冬陽

今天台南有舒服的冬陽
剛好中午買飲料時,又看到了藍藍的天
順手拍了一些
讓各位畢業大家回憶一下系館  :)

20090101043_s 20090101045_s
20090101047_s

20090101048_s 20090101049_s

20090101051_s 20090101052_s

20090101053_s

20090101054_s

20090101061_s 20090101064_s

20090101069_s

20090101072_s

20090101075_s

20090101077_S