Posted in June 26, 2010 ¬ 12:26 amh.diro
要打造一個效能良好的 Multi-Thread Application 是難度相當高的一件事,一般來說第一個會碰到的問題就是因為 synchronization objects 的 contention 造成的效能下降,通常可以用 atomic operator 及 lock-free algorithm 做一些改善。而隨著現在 CPU 的核心數愈來愈多,又把難度向上提高了不少 Orz。其它常碰到的問題包括了:
第一個是 Load imbalance:假設你的電腦是 4 cores,理想上開 4 threads 來做事是最好的,但是這 4 個 threads 要做的事情必需一樣重,不然就會有人是閒閒沒事做,別人操的要死的狀況,如果你是開發演算法,可以考慮用 Intel TBB 中的 task 來解決這個問題。
第二個是 Threading overhead:大家都知道 context switch 是很花時間的,但是並不是說 threads 愈少就一定愈好!這是一個很複雜的問題,留待之後再來討論~
第三個是 Memory Bandwidth Bottleneck:因為每個 thread 它所需要讀取/寫入的資料有可能是毫無關聯的,但因為資料及指令是需要被讀入 L1 Cache 才能執行,因此會大幅增加 cache line miss 的機率,一般來說L2 Cache 比L1 Cache慢約七倍,而 Main Memory 就更不用說了,更是無敵慢,因此這點將會是造成效能問題的最大瓶頸。老實說,這是我目前覺得最難處理的:如何讓 cache 及 memory 作最好的運用。
前面三個問題(sync obj, imbalance, overhead)比較容易解決,Intel 的工具 Thread Profiler 可以幫你很有效的分析出問題所在,下面這份教材是我目前看過最好的,如果你現在在開發 Multi-Thread Application,你一定要看一看這一篇:
http://www1.ju.edu.jo/ecourse/cpestcourse/notes/Intel/06%20Edited_ThreadProfiler.ppt
Thread Profiler 可以讓你在不需要修改程式的狀況下就進行分析,支援了目前大部份主流的 compiler,而且可以跟 source code 結合,直接指出問題的所在~你也可以拿來分析你 Synchronization Objects 的 contention 狀況, 強力推薦。
至於記憶體的問題,則是要請出神器 Vtune 來解了,我們下回再做討論~
Posted in May 9, 2010 ¬ 11:01 pmh.diro
前一陣子家裡一直在討論要買那一種咖啡機,自從見識過 nespresso 之後,就覺得這種東西才是讓家庭更幸福的機器啊!省時方便,咖啡也在水準之上。
因為怕趕不及母親節,特地到板橋總公司去買,順便參觀一下傳說中的巨唐,裡面真的還不錯,讓我大開眼界 XD

capsule! capsule! capsule! 這是膠囊堆出來的一面牆
(more…)
Posted in May 8, 2010 ¬ 11:26 pmh.diro
我希望有一個裝置可以讓我控制家中所有有紅外線的設備(冷氣、電視、MOD…),已經有一些商品化的產品,但是還是想自己做看看。
目前最流行的是用LIRC或Winlirc,不過看起來都是用RS-232的 solution,在現在這個年代用RS-232實在是不大中,我想要研究一下比較現代化的做法。
- USB IR 接收/發射器
- Tira (USB IR transmitter / receiver)
- http://www.home-electro.com/tira2.php
- USB-UIRT
- http://www.usbuirt.com/
- Implementation USB into microcontroller: IgorPlug-USB (AVR) 這個看起來很累人 Orz
- http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20%28AVR%29_eng.htm
- 另一個看起來比較平易近人而且還有在maintain的 USB IR transmitter/receiver
- http://dangerousprototypes.com/2010/01/29/prototype-usb-infrared-remote-control-receivertransmitter/
- Project / Resource
- Linux Home Automation
- http://www.linuxha.com/athome/
- OpenRemote
- http://openremote.org/display/HOME/OpenRemote
Posted in May 6, 2010 ¬ 3:44 amh.diro
在 debug 時最常用到的就是 symbol file / symbol server,然而相信常有 load 不到 symbol file 的經驗,不管怎麼按,怎麼換,不對就是不對,有時覺得明明就放對了,還是不能用 Orz。如果你用的是 VS.NET,應該永遠都只能繼續怨天尤人、哭天搶地了,但如果你用的是 windbg 的話,那麼請照著下面步驟來解決這個問題。
例如我在追查memory leak的時候,去分析一個 address 的 call stack
!heap -p -a 0×12344545
結果得到的 callstack 非常詭異,一看就覺得不可能,或著它很明顯的告訴你「Following frames may be wrong」,那們八成是 symbol 不正確了
首先要先判斷為什麼 load 不到,先用 sym 打開 symbol 的詳細訊息
!sym noisy
此時重新執剛才的指令 !heap -p -a 0×12344545, 此時它便會告訴你它有那些 symbol file 是有問題的
- checksum 不正確
- 如果你確定 symbol (.pdb) 是對的, 或著你是重新用一模一樣的 compiler setting 所編出來的 pdb,那麼你可以試看看強制忽略 checksum
- .reload /f /i [xxxxx.exe]
- 根本找不到 .pdb
- 請注意看 message,它會告訴你它在那些目錄下搜尋過 pdb,看一下你的 pdb 是不是真的放對位置了吧! (如果你連 symbol path都不會設,趕快去翻一下手冊吧)
通常這樣就可以解決大部份的問題了, 而 !sym noisy 還可以顯示 .pdb 中的一些警告資訊,如 source index 沒有做之類的, 相當有幫助。
最後別忘了用 !sym quiet 把 message 關閉,才不會看到一堆沒有用的訊息。
Posted in March 27, 2010 ¬ 11:43 pmh.diro
男人在煮大餐給老婆吃時,如果能夠先出現一道很威的沙拉,絕對能夠讓自己在家中的地位大大提昇

(more…)
Posted in March 27, 2010 ¬ 11:26 pmh.diro
上次介紹的 TeamCity 預設是不支援 Boost Unit Testing Framework 的,需要額外的 plugin 才能將Boost UTF 的測試報告整合進 TeamCity 中。
首先先到 TeamCity 官方網站下載 plugin,檔案在
http://confluence.jetbrains.net/display/TW/Cpp+Unit+Test+Reporting
裡面有一個 teamcity-boost-1.2.zip for Boost.Test library,下載回來之後解壓縮可以得到三個檔案
teamcity_boost.cpp
teamcity_messages.cpp
teamcity_messages.h
只要將這三個檔案加入你原有的 testing project 中即可,不需更改任何設定。
咦,這麼神奇,為什麼這三個檔可以達到這種效果,答案是它是用了 UTF 中的Global fixture,如果你不知道什麼是 fixture,可以先去查詢一下軟體測試的相關文章。這個 Global fixture 會去處理每個Test Case的測試結果,並加以回報給 TeamCity,整體的整合度還蠻高的,可以看到有那些 Test Case,有那些 PASS 以及那些 FAILED,當然FAILED 的訊息也會完整的呈現。
Posted in March 25, 2010 ¬ 11:52 pmh.diro
大教堂和市集(The Cathedral and the Bazaar) 是一篇相當有名的文章,不過之前一直沒有看,直到後來讀了Dreaming in Code 一書後,才把這篇文章仔細讀完。這篇文章是由 Eric Steven Raymond 所寫,內容在描述 Linux 的開發模式(市集)及Raymond 自己仿照這個模式開發 fetchmail 的過程,並探討其為什麼成功,其中列了十幾項格言,有幾項個人還蠻有感覺的,如果你覺得你的團隊現在碰到了一些瓶頸,推薦你可以讀讀這篇文章。
http://www.linux.org.tw/CLDP/OLD/doc/Cathedral-Bazaar.html 這篇文章的翻譯翻的蠻好的,推薦!
[格言 1] 好軟體都是起源於程式發展者要解決切身之痛.
[格言 14] 任何的工具以我們所知道的方法來使用都會有用, 但一個真正了不起的工具會以你從未想過的使用方法來發揮它的功能.
[格言 19] 假如專案發展協調者擁有至少跟網際網路一樣好的媒體, 而他也不靠強制力來領導, 那麼一群人必定勝過一個人.
其中我認為最要的,仍舊是格言 1,因為它背後的含意是”熱忱”,有熱忱才能開發出好的軟體,如果你的團隊不知他為何要打造這個軟體?這個軟體到底有什麼用處?那麼,這個軟體註定不會成為一個優秀的軟體。
Posted in March 21, 2010 ¬ 9:17 pmh.diro
今天到明德水庫中的小島-日新島。日新島上有目前台灣唯一的島上餐廳-水榭樓台。整個小島整理的很棒,很適合情侶或帶小朋友來這裡走走哦

完整相片集: http://www.flickr.com/photos/diro/sets/72157623532348101/
(more…)
Posted in March 1, 2010 ¬ 11:29 pmh.diro
各位男人們,又到了捲起袖子做家事的時間了,這次是超簡單製作的蔥油餅,好吃便宜,在老婆沒有煮飯的日子裡,蔥油餅絕對是陪伴你的好朋友








製作燙麵。燙麵就是用熱水加到中筋麵粉中加以攪拌(比例為2:1)。正常來說接著再加入些許的冷水(跟熱水比例也約2:1,邊加邊看),然後開始用力的揉揉揉..
接下來,請參考 flickr 上完整的作法..實在太長了 Orz
這裡,我們直接看成品就好 XD
