是 CPU 的因素,還是 OS 的因素?
發表於 : 04/27/2005 9:33 pm
在下最近在測試嵌入式系統用的程式。軟體弄好了,但是硬體平台廠商跳票延後,於是就弄了一個簡單的 Chip 模擬環境,打算先丟到電腦上測試。因為只是過渡期的測試用,懶得花太多心思去弄什麼完整架構,用了一堆 shared memory、fork、pthread 和 signal,然後用 usleep 和 SIGALRM 模擬時脈,想當然爾,寫出來的程式吃 CPU 資源吃到爆。程式是標準 POSIX 環境,在下分別在 PowerPC G4 1G、Dual G4 867 和 Intel P4 3G 的平台上編譯執行,結果卻出乎意料之外。
在下一開始寫的時候在 PB 1G 上編譯,為了時脈與 thread 衝突問題,花了不少精神調整 usleep 間隔來確保 shared memory & mutex 動作來得及完成。後來把程式搬到家裡的 PM G4 Dual 867 上,怪怪,執行效率驚人。縮短 usleep 信號間隔測試,程式的處理速度硬是快了將近一倍。
這兩天,為了要和其他人的程式碼整合測試,把程式碼原封不動搬到公司最新的一台 P4 3G 的 Fedora 2.0 平台上重新編譯。一執行,就被嚇了一跳,thread mutex 與 share memory 的處理速度慢到不行。必須重新調整 usleep 間隔,延長成原來的 1.5 倍才能正常運作。
這三台機器,光看時脈,P4 3G 是老 PM G4 867 的三倍以上;但是 Multi-thread 程式的執行效率,老 PM G4 867 卻是新 P4 3G 的三倍。雖然說這樣的評估與測試很籠統、有很多其他因素會影響,不過這樣的結果也實在有點誇張。不曉得這是 Apple 的 Dual CPU 架構設計得好,還是 BSD 天生就比 Linux 適合跑 Multi-thread 程式?
看來終於有理由要公司敗一台 PM Dual G5 來給在下操了
在下一開始寫的時候在 PB 1G 上編譯,為了時脈與 thread 衝突問題,花了不少精神調整 usleep 間隔來確保 shared memory & mutex 動作來得及完成。後來把程式搬到家裡的 PM G4 Dual 867 上,怪怪,執行效率驚人。縮短 usleep 信號間隔測試,程式的處理速度硬是快了將近一倍。
這兩天,為了要和其他人的程式碼整合測試,把程式碼原封不動搬到公司最新的一台 P4 3G 的 Fedora 2.0 平台上重新編譯。一執行,就被嚇了一跳,thread mutex 與 share memory 的處理速度慢到不行。必須重新調整 usleep 間隔,延長成原來的 1.5 倍才能正常運作。
這三台機器,光看時脈,P4 3G 是老 PM G4 867 的三倍以上;但是 Multi-thread 程式的執行效率,老 PM G4 867 卻是新 P4 3G 的三倍。雖然說這樣的評估與測試很籠統、有很多其他因素會影響,不過這樣的結果也實在有點誇張。不曉得這是 Apple 的 Dual CPU 架構設計得好,還是 BSD 天生就比 Linux 適合跑 Multi-thread 程式?
看來終於有理由要公司敗一台 PM Dual G5 來給在下操了