瀏覽單個文章
熱鬥小狐
*停權中*
 
熱鬥小狐的大頭照
 

加入日期: Apr 2001
您的住址: 香港
文章: 1,441
引用:
作者littleshan
你看起來沒有了解我的意思,讓我說具體一點好了。
你好像以為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身上,所謂「開發廠商」並...

上面的寫法已經把兩種指令包括在內,若可以使用spin-lock就使用spin-lock
不行就使用monitor/mwait去做相同的工作
似乎Intel寫SSE3時有考慮到這點,那我推翻自己的說法
舊 2005-08-07, 09:30 PM #24
回應時引用此文章
熱鬥小狐離線中