引用:
|
作者littleshan
不需要。SMP中的spin-lock程式碼行之多年,把它改成monitor/mwait的形式不但浪費人力,效能也不會比較好。
再者,使用spin-lock或是monitor/mwait必需根據CPU屬於真正的physical core亦或是logical core,而這部分必需交給OS來做。也就是說,這兩支指令應該只有在OS實做synchronization時才會用到的。一般的應用程式根本不需要用這麼低階的指令,而應該用OS提供的system call來達到synchronization的功能。這樣做不但簡單易懂,也不會有相容性的問題。
|
不過以目前的 OS 都是用 C 來 implement 的,像 windows NT kernel (4.0/5.0),spinlock 會被 OS 與 driver 呼叫,但是我想實際 implement 方式會隨 cpu 不同,而呼叫最佳化 function,如果是 p4 可以使用 monitor/mwait 最佳化程式碼,而 k7/k8/p3/p-m 則用傳統的 busy waiting。
而 application 的 synchronization API 因為是 system call,也是可依照 cpu 來最佳化,即使是在 unix 下,用 user level thread 來 implement,也是可以修改動態聯結庫 (.so) 來最佳化,而不用修改應用程式。
另外 SSE3 應該不是針對 P4 的 HT 而作的設計,SSE3 是 SIMD 或稱 vector 指令集,只對某些可以大量平行運算的浮點運算有用,像是 matrix 或是 FFT/DCT transform 等,對一般整數運算沒有任何幫助,這就是為什麼 p4 只有 video/audio encoding 強的原因,但是運算一但複雜,牽扯到 data dependency,尤其是越複雜的運算,p4 過長的 pipeline 就是最大致命傷,性能馬上暴跌。