引用:
|
作者熱鬥小狐
沒有人說要把spin-lock程式碼改成monitor/mwait的形式執行
而是相反,把monitor/mwait程式碼改成spin-lock的形式執行
這樣開發商只需要為P4寫一次程式碼就可以直接拿到K8執行
當然也可以用你的方法,但就必須修改程式碼了
相對於開發商來說未必是好事,因為開發時間會長了,多一個選擇給他們並不是壞事
|
你看起來沒有了解我的意思,讓我說具體一點好了。
你好像以為spin-lock是硬體技術,但事實上它不過就是個迴圈。
傳統SMP的spin-lock是長這樣
代碼:
while(1){
while(lock_var);
EAX = 1;
swap(lock_var, EAX);
if(EAX == 0) break;
}
// critical section goes here...
有了monitor/mwait指令後變成這樣
代碼:
while(1){
while(lock_var){
monitor lock_var;
if(lock_var != 0){
mwait;
}
}
EAX = 1;
swap(lock_var, EAX);
if(EAX == 1) break;
}
// critical section goes here...
雖然你強調「只需要為P4寫一次程式碼就可以直接拿到K8執行」,但就算在P4上,這兩種程式碼還是需要並存,因為前者適用SMP/dual-core,後者適用hyperthreading。而判斷應該使用前者或後者的責任則在OS身上,所謂「開發廠商」並不用管這件事,也不需要為了dual-core K8寫一份新的code,他們只要用OS提供的system call,給hypterthreading P4用的程式也可以在dual-core K8上跑得很愉快。