2009年5月30日 星期六

什麼叫組裝電腦..

2009年5月28日 星期四

intel parallel studio 開放下載

當然啦, 是先行試用版...

能找到的新聞只有這個...
"2009年5月26日,北京——英特爾公司今天正式推出英特爾 Parallel Studio 並行程序開發套件,旨在為基於 Microsoft Visual Studio 的 C 與 C++ 程序開發各階段提供簡單、高效的 Parallel Studio 工具,顯著提高應用程序在英特爾多核處理器上的性能。英特爾還同時推出了該開發套件的新插件英特爾 Parallel Advisor Lite,用戶可登錄http://WhatIf.Intel.com網站下載,它可以幫助架構師確定哪些源代碼最適合並行化並提供詳盡的並行化實施建議。"

我比較有興趣的是它有特別強調在 MultiThread 下的 debug 能力..
不過最近沒時間碰, 我連 MPI 都擺著好久沒開刀去試了 =_=



2009年5月22日 星期五

VisualAssistX 後記

這篇是在 WinXP x86 下的筆記, 在 x64 上是不能用的, 在 Windows7 x64 RC7100 上 Visual Studio 要改的 register key 在這個位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Languages\File Extensions
其實就是多了紅字那個路徑.

還有, 因為 windows7 下 "c:\document and settings\all users" 這目錄一般是不能存取的 (如果有可以解開不能存取鎖定的方法煩請 report 給我, 我找很久了..), 所以安裝 CUDA SDK 時也請注意不要安裝到它的預設目錄 (預設就是在底下安裝), 把它另外指到 c:\CUDA (也就是 CUDA toolkit 預設安裝目錄) 再開個 SDK 的 folder 給它裝, 然後再把 VistalAssistX 的 reference folder 目錄設定指過去, 就可以了.

雖然我是 debug 了一段時間才把 VAX 裝上去.....
ps. x64  XP 跟 vista 是不是一樣我不確定, 我沒有實驗過.

PCIe測試機後續

因為brook+的部份對記憶體的存取一直有問題, 到剛剛才找出問題點, 那就是 domain 函式不正常.

這個問題在 catalyst 9.5 以前都沒有過, 9.5 開始有這個問題, 而且搞的記憶體讀寫能力更大幅度下降. 
以下是已編譯好的 (PCIeTest090522exe.rar)
與講好要給拖到現在的 source (PCIeTest090522src.rar)

另一個心得就是, 為什麼 ATi stream SDK 裡有兩樣東西, 一個叫 CAL, 一個叫 brook+, 因為這兩個其實是作用一樣的產物, 只是 CAL 沒有編寫 IL  kernel 的能力, brook+ 才有, 而 CAL 可用的功能也較 brook+ 要多, 而且目前的 SDK 裡沒看到有整合的蹟像. 也許在 OpenCL 上做個整合吧? 天知道..

而且不管 brook+ 還 CAL 的 multi-thread 能力比 CUDA 顯的差多了, 有點懶的再玩下去了.

2009年5月20日 星期三

[鬼扯] 當指導教授的實力..

這是真實對話.. 

我研究所論文是做人臉辨識, 有一天我在上我指導教授(以下稱老闆)的樣形識別課時, 他課中問我:

老闆: "瓦斯, 狗怎麼識別?"
瓦斯: "老闆問兩隻腳還四隻腳的?

老闆反應很快, 真的很快, 完全不假思索就回出這一句:

老闆: "兩隻腳的我已經叫你做了, 我問你四隻腳的"

2009年5月18日 星期一

測試機後記..

有問題.. 修改中..

[有請幫忙測試] PCIe 頻寬測試機

這個是 CUDA + Brook+ 的混合開發成果之一, 主要是拿來測顯卡用的 (限 nVidia 可以支援 CUDA 的產品, GF8100 以上. ATi 可以支援 CAL 的產品, HD2350 以上), 如同時有 nv 跟 ati 的顯卡的話就會一起測試. 但不確定能否支援 SLI 或 CF, 因為我沒硬體可以測試.

檔案: http://www9.zippyshare.com/v/82614738/file.html
這是內含 nvcuda.dll 的版本

測出來的數據大約是極限頻寬的 75% 上下, 各位請把測試畫面中的文字剪下貼上回應給我這樣就好, 感謝大家 <(_ _)>


跟以前一樣, 想要研究 source code 的 email 給我或留言給我 email 信箱.

SiFT..

Scale-invariant feature transform..

老實講, 我已經忘記這種特徵抽取法是幹麻用的了 ~_~..

2009年5月14日 星期四

屈原最偉大的發明其實是...

消波塊..

歐盟告 intel...

某人說, 其實背後的故事沒那麼簡單.

http://it.sohu.com/20090514/n263955035.shtml
---------------------------------------------------
【搜狐IT消息】北京時間5月14日消息,據《財富》網站於週三發佈分析文章指出,歐盟委員會於週三對英特爾處以創紀錄的10.6億歐元(約合14.5億美元)罰款,並稱英特爾在與AMD的競爭中濫用市場優勢地位。
歐盟此次逼壓英特爾表明其又與美國大公司展開較量了。

此次英特爾案正值歐盟與微軟長達九年的「戰爭」之後不久,而在去年結束的歐盟-微軟紛爭中,微軟終以被處以兩項罰款而結束了這一曠日持久的「戰役」——2007年被罰6.8億美元、2008年又被處以12億美元的罰款,兩次理由都是微軟濫用市場壟斷地位。
另外,目前還在遭受歐盟壓力的美國大公司還包括萬事達和通用電氣等,前者在2007年被歐盟勒令取消信用卡費用;後者則被歐盟阻止與霍尼韋爾公司進行合併。
---------------------------------------------------

有人這一篇, 節錄部份.


---------------------------------------------------
瓦尼的新政策將使美國的反托辣斯政策,更接近歐盟執委會反托辣斯監管機構的看法。愛荷華大學法學院教授霍文坎說:「這對Google、微軟等科技業巨擘是壞消息,將使原告陣營歡欣鼓舞,令被告焦慮不安,但不會對律師事務所造成衝擊,因為不管站哪邊都有錢賺。」

我知道台灣大家都很愛歐巴馬
即使我在選前到選後都一再講
不要真的以為歐巴馬當選會幫大家帶來公平正義
更有可能的是
他幫美國帶來公平正義
但是美國的公平正義對其他國家來說
可能更接近是一種災難
---------------------------------------------------

也許有人看到有公司被告要賠大錢, 或者很爽或者很幹, 但我覺的這些事情背後要擔心的, 就是幾時會告到自己身上來, 歐盟跟老美這些國家為了錢而眼紅時都是很殘忍的.

2009年5月11日 星期一

自由軟體的崇拜者總是充滿著仇恨..

找 ESX server 資料時看到的一句話..

"Richard Stallman: 把含有Windows的電腦送給兒童, 根本不是在幫他們, 而是把他們曝露在殖民強權之下, 這太糟了, 比什麼都不作還要糟糕."

這些人一輩子都不會知道, 用攻擊別人的口吻並不會讓自己得到尊重, 相反的會得到更多的鄙視.

2009年5月10日 星期日

實現 brook+ 與 cuda 於 VS2008 下的混合開發.

會寫這篇文是因為原本想把 brook+ 跟 cuda 的專案整在一個 project 裡面, 但這樣會碰上資料格式重覆定義的錯誤, 才嘗試將這兩種語言分別以兩個不同的 project 去做成個別的 DLL, 這樣一來也比較方便管理各別的 code.

首先遇上的就是做成 DLL 時 brook+ 與 cuda 各有各要注意的事項, 而在講建立 DLL 之前我要先提怎麼建一個 custom build rules, 以下以 cuda 的為例.

[build rules]
建立 cuda 的 build rules 其實很簡單, 只是設定而已. 先將 C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA CUDA SDK\common\Cuda.rules 這個檔案 copy 到 VS 安裝目錄的 VC\VCProjectDefaults 下 (這兩個目錄都可以用 "搜尋.rules檔案" 找的到). 
檔案丟進去之後, 在 VS 底下隨便選一個 project 名按右鍵選 custom build rules 如圖

尋找一個已經存在的 rules

指到剛剛 cuda.rules copy 到的目錄

選到 cuda.rules

後, 會跟第一個畫面一樣上面會多出現一個 cuda build rules, 而在 cuda 的 project 上請把那設定畫面中 "CUDA build rules" 勾起來, 這樣你這個 project 以後加 .cu 的檔案就會自動套用這個 build rule, 以後加檔案會方便很多!
引用成功後可以在 configuration properties 裡看到有 CUDA build rules, 但 include 的設定是空的! 請在 debug 與 release 兩個 configuration 裡都加進去這行 
"$(CUDA_INC_PATH)"; "$(NVSDKCUDA_ROOT)/common/inc"
Linker 裡 Input->Additional Dependencies 裡加上 cudart.lib cutil32.lib 這兩個.

而 brook+ 沒有 .rules 可用, AMD 官方以 "你可以自己建" 一句話輕鬆帶過. 要建一個簡單可用的 brook+ rules 不難, 但我不知道怎麼自動區分 debug 還 release build, 我目前用的還是舊的筆記 .

[cuda project]
cuda 的檔案因為都是 reference 自 .cu 運作, 但如果給一般 .cpp 裡 include 這些 .cu 檔時, VC9 會出現一堆錯誤 (不知道 threadIdx 是啥, 看不懂 <<<>>> 等等..), 而解法其實也很簡單, 就是再建一個 header 檔裡面說明你要引用的 .cu 檔案裡有哪些 function, 然後再給其它 .cpp 檔案引用這個 header 檔, 就可以正常編譯.
cuda 的 DLL 可以直接用 MFC DLL 的框架, 也可以全部自訂.

[brook project]
brook+ 要建 DLL 時最好不要用 VS 裡的 project wizard 去建, 因為那個會用到 precompile header (stdafx.cpp, stdafx.h) 的關係, 底下每一個 .cpp 檔都要去 include stdafx.h 才可以正常編譯, 但 .br 編譯時是以 "產生" 的方式輸出 .cpp 檔跟兩個 header 檔, 即使在 .br 檔裡加入 #include "stdafx.h" 這行, 最後在輸出的 .cpp 檔裡 stdafx.h 這行也會被排到前三個一定會 include 的 header 檔下面, 然後編譯會有一堆問題.

我的解法是, 開一個空的 project, 裡面啥都沒有, 然後把 brook+ 所有的檔案移過來這個 project 裡, 也要設定好相關的編譯環境 , configuration type 改為 DLL 即可. 

而 project 的 properties 中, linker -> input -> Additional Dependencies 加上該有的 .lib, release mode 是 brook.lib aticalrt.lib, debug mode 是 brook_d.lib aticalrt.lib

沒意外的話都可以編譯的起來了.

2009年5月8日 星期五

2009年5月5日 星期二

S.T.A.L.K.E.R. grenade mod

這個改法對 STALKER 跟 STALKER clear-sky 兩版都可以用.

榴彈其實分兩大類, 榴彈砲 (vog-25/vog-25p/M209) 跟手擲榴彈 (RDG5), 不過兩種的改法都一樣, 只是設定擺在不同檔案裡而已. 首先來講 rdg5 這個手榴彈, 首要的就是在網路上找到武器的 mod 檔案 (.ltx), 裡面要有 wpn_rdg5.ltx, 而且是要擺在
C:\Program Files\Deep Silver\S.T.A.L.K.E.R. - Clear Sky\gamedata\configs\weapons
這個目錄下.
用 untraedit 編輯這個檔案, 修改內容如下:

改成燃燒型態有兩個好處 1.範圍廣 2.連續傷害時間長(這是重點)
如此一來, 只要是手榴彈爆炸, 就等同瓦斯桶爆炸一樣..
如果再把 weapon.ltx 裡 fueican 的參數拿來用的話就等於在丟瓦斯桶了.
這是手榴彈丟出去後的樣子:


榴彈砲則要改 weapon.ltx, 裡面找到這個欄位後, 改法跟 rdg5 一樣:
"[wpn_fake_missile]:identity_immunities,default_weapon_params"
"[wpn_fake_missile1]:identity_immunities,default_weapon_params"
"[wpn_fake_missile2]:identity_immunities,default_weapon_params"
上到下分別是 vog25, vog25p, M209. 以下是 vog25 的效果:



這裡面最可惜的是沒有核彈爆炸的圖可用.....
還有就是 blast 參數建議不要超過 5, 離太近很容易連自己一起炸死.. XD

順路補上一張遠程攻擊的圖片... XD

讓 Visual Assist X 支援 .cu 與 .br

Visual Assist X 是一個 Visual Studio 的輔助工具, 可以方便查閱想引用的 function 名稱, 或變數等等, 這篇文參考自這裡, 不過在這裡我用的是 VS2008 與 Visual Assist X 10.4, 設定較原始文章有點出入.

首先先在 register editor 裡 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Languages\File Extensions
找到這一行, 把後面那一大串字串 copy 下來:



然後在這個左列新增上字串 ".cu", 裡面的預設值就貼上剛剛 copy 的東西.


這個同上, 新增一字串叫 ".br", 裡面貼一樣的東西.


再來是修改 Visual Assist X 的內定設定, 10.4 用的路徑跟過去有點不一樣, 我這的是
HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet9
將裡面的 ExtSource 後面增加 ".cu;.br;"

再來才是要在 VisualAssist X 的 options 裡額外設定 header 檔擺放路徑, 建議兩個, 一個是 "C:\CUDA\include" 這是 CUDA toolkit 的預設安裝目錄, 一個是 "C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA CUDA SDK\common\inc" 這個是 SDK 預設安裝目錄, 這樣就可以抓的到 cuda 用的一些設設定如 __global__, 可以查的到 cuda 用的 library 名稱跟引入參數型態等等.


附帶一提, cuda sdk 2.1 似乎也會受 path environment 裡有 "()" 符號存在而被影響的問題 (上次於 icc11 文中提到的問題), 影響的結果竟然是 vs9 用的 solution 檔案不能 compile.

2009年5月4日 星期一

brook+ 的測試程式

過了那麼久的時間, 也終於擠出自己的一支程式了, 雖然後面打算要做的還很長.. ~_~

這隻程式簡單的講, 就是計算積分圖 (引自 paul voila "Rapid Object Detection using a Boosted Cascade of Simple Features" (CVPR 2001)) 的計算效率, 如下圖的左圖的運作模式.
這個東西要平行化, 最麻煩的一點就是它要參照前一個像素值的累加值, 不像矩陣轉換可以平行進來平行出去這麼簡單. 於是我採用分開每個列 (column) 各別去積(圖A), 寬有多長, 就拆成多少個 thread 下去跑, 算好的結果, 以轉90度的方式擺放在暫存記憶體內的對應行 (row) 內(圖B). 然後這個暫時性記憶體(圖C)一樣做垂直積分, 積好的值一樣以轉 90 度擺放, 但是是擺放到原本的記憶體內. 這樣就可以完成積分的動作.
這樣做最主要的目地是因為要寫在 brook+ 裡, 因為 brook+ 內無法讀取 output array 內的值, 只能寫, 所以要靠兩段記憶體交互的填充運作下才能達成.. 
如果有人有更高明的手法的話歡迎賜教, 老實講小弟我覺的這方法實在很不理想 ~_~

以下是據發表在 ptt VideoCard 版上的文章修改而來.

這個是小弟我用 brook+ 1.4beta 寫的, 但因為是用 VS2008 編譯的, 所以執行這東西需要一個 VS2008 散佈套件:

http://tinyurl.com/6yv6k2

有一個問題講在前面, 因為這是用 ATi GPU 跑的程式, 所以當執行時間過久, 會造成畫面無法回應, 而 windows 在某一定時間內沒有得到顯示畫面回應的話, 就會 reset GPU. 也就是有人會碰到的 VPU-recovery. (windows XP 是五秒, vista 好像是三秒??)

目前已知如果一邊跑工作管理員的話, 就 100% 會發生 VPU recovery, 下版我會好好修正這問題.

所以建議在跑這隻測試程式時, 將其它使用 CAL 的軟體停止運作, 像 folding@home? (名字忘了..).

第二, 運作途中若遇到畫面停止回應, GPU 被 reset, 程式就可以 ctrl+c 中止掉了, 因為 GPU 內的程式也沒了.

測試內容是計算積分圖, 分別以 x86 float (兩種方法), SSE2, 與 ATi GPU 計算 (兩種方法) 等不同的平臺上比較計算的時間還有結果, 但 16mS 以內算 OS 本身的誤差. 檔案在這:

http://www6.zippyshare.com/v/79337531/file.html

有張廣告圖的右邊, 有個 Download Link 會倒數, 倒數完後才會浮現 "Download" 字樣. (字真的很小..)
sorry 弄半天 SourceFroge 不知道怎麼傳東西上去 T_T

以下說明使用方法 (以下有很多髒話.. 這是小弟我的惡趣味..).

1.檔案解壓縮開來後, 解到一個地方假設叫 d:\temp (要默記)
2.window key + r, 會跳出 "執行", 打 cmd + [enter]
3.d:
4.cd \temp             (這就是剛剛默記的目錄名)
5.bitchmark.exe 512 512
    內定大小是 4096*4096, 在這裡設 512*512 測小一點, 免的 VPU 又掛點.. 以這個例子在我的機器上執行結果會是這樣:
    found num of 1 CAL hardware
    build the fuck matrix 513 by 513
    Normal Float32 bitch 1 fucking time 0.000000 mS
    Normal Float32 bitch 2 fucking time 0.000000 mS
    SSE2 Float32 bitch fucking time 16.000000 mS
    ATi CAL GPU (float1) bitch fucking time 640.000000 mS
    ATi CAL GPU (float4) bitch 1 fucking time 375.000000 mS
    ATi CAL GPU (float4) bitch 2 fucking time 250.000000 mS
    it's saw fucking good..!
    Press key...

    GPU 方法三在 1536*1536 以上測試會自動關掉, 後述.

6.PCIeSpeedTest.exe
  這是測 PCI-express bus 頻寬的, 但很容易造成顯示卡沒有回應! 這程式也是 ATi 顯示卡限定. 在這隻程式裡, 小弟的 GA-MA770DS3 這片板子 GPU->CPU 的頻寬不到 1Gbyte/s (別人測是 5.3Gbyte/s.. orz). 
執行結果:

Devices found: 1

===> Testing device 0 <===
Device type: RV770
Max resource 2D width/height: 8192/8192
Total GPU memory size: 1024 MB
Total CPU cached space size: 64 MB
Total CPU uncached space size: 128 MB
GPU engine clock: 400 MHz
GPU memory clock: 800 MHz
Number of timing loops: 100
.....[後略]

註1. GPU 方法三因為是實驗中 async multi-thread 方法, 但會在更大矩陣運算時出錯.

程式如果有人想看 source code 的, 請留 email 到我信箱裡索取. :P