網際論壇 - 軟體綜合研討 - [分享]WINDOWS資料夾下,有個Prefetch資料夾的作用
» 遊客:  註冊 | 登錄 | 會員 | 幫助
 

免費線上小說
動漫分類 : 最新上架熱門連載全本小說最新上架玄幻奇幻都市言情武俠仙俠軍事歷史網游競技科幻靈異 ... 更多小說

作者:
標題: [分享]WINDOWS資料夾下,有個Prefetch資料夾的作用 上一主題 | 下一主題
  sax0936
  高級會員 
 


 
  積分 6292
  發文 304
  註冊 2005-9-6
  狀態 離線
#1  [分享]WINDOWS資料夾下,有個Prefetch資料夾的作用

其實早就有Prefetch了

 

其實我可以這樣講,如果沒有PreFetch,那我們現在的CPU會跑的慢上很多.

大家一定覺得很奇怪,

如果真是這樣,那請問那為什麼Palomino沒有比缺少Hardware prefetch的TB快上很多?

那各位就有所不知了,其實每顆CPU管你裡面有沒有Hardware Prefetch的功能,

每顆現代的CPU早就在享受Prefetch帶來的好處了,只是,不是用"硬體"做的罷了..

 

什麼是 Prefetch.

 

prefetch英翻中,直接的意思也就是"預先提取".其實道理再簡單不過了,也就是說要早在CPU需要那筆資料之前,

就下一筆不是"常態"的指令,

先把它從MainMemory(以後就直接說DRAM好了)提取出來,放在離CPU較近的L2 or L1 Cache中.

那大家一定覺得很怪,幹嘛預先就要?不會到時要喔?這樣有差嗎?

 

 

沒有Prefetch,效能差很多

 

不要忘了,到DRAM抓資料回來Cache至少要30個以上CPU cycles.

也就是如果你現在用這筆資料,不得不去DRAM抓的時候,你要在這裡等個30 Cycle,你才能做下去.

再嚴重點.現在的CPU都是超純量的(SuperScalar,就是多管線的意思啦),

如果今天是一顆4-way(4管)的CPU,正好其他3管的指令,都在等你這管的處理後的資料,(這種叫Dependency),

哇,也就在30個CPU cycle內,沒有一條管線可以跑任何一筆資料,完完全全浪費了這顆CPU的功能.

他的設計原本應該是1個cycle能跑四筆指令的,現在變成1個cycle只能跑1/30個指令.

 

Prefetch的功用

 

那很明顯的,如果在之前,就先發了load的指令讓資料能預先留在cache裡頭,到時候要用時,就可以直接拿來用了.

不過,這很自然的會增加一些指令,甚至有時會抓進去一大堆 到時候根本沒有屁用的資料,看了便知.

當然這是可以"改良"的.

 

Software 和 Hardware prefetch的不同

 

就我所知,Software based的prefetch是必然要用的.也就是程式在寫好,compile之後,他裡面的程式碼早就考慮到prefetch的問題了.

現在的compiler一定都會提供這類的選項,或甚至直接使用.

Compiler很聰明,他會在程式跑到真正需要用到該筆資料之很多行之前,會插入prefetch的指令.

(當然,這些指令不是當初寫程式的人所能知道的).

想想如果沒有Software Prefetch,這真的會是一場災難.因為x86的程式會compile出一大堆Memory指令.

如果每條指令都按步就班,不偷步.那CPU也真的不用SuperScalar了,

就弄一個80386-1000SX好了.

 

Hardware Prefetch

 

當然目的是一樣的,但是作法實在太多種了,簡單到最難,一應具全.

他在L2 Cache旁邊,自己加了一個小buffer.

ok,如果是最簡單的,那他會在Cache miss時,同時把Miss的資料和緊接著幾筆的資料一起抓到Buffer中,

也就是如果第二筆資料就是緊接在第一筆之後的話,那他就可以直接從Buffer中拿,不用還要回DRAM拿了.

當然,天下沒有白吃的事.不是所有的資料都是緊接著的.有時候,他可是有間隔的.

可能是隔4,可能是隔8,看他爽不爽.那你笨笨的隔一個抓豈不儘抓些垃圾,給我滾.

也因此,比較好的Prefetch buffer會有一個"預測"的機構,會把每次資料相差的距離大概記錄一下,再決定下一筆資料

要從那個位址抓過來.這樣當然比較準,但是相對難做很多,甚至Latency變大.

對於Hardware的Prefetch的大概就是這樣.


2005-12-27 03:19 AM
查看資料  發短消息   編輯文章  引用回覆
  sax0936
  高級會員 
 


 
  積分 6292
  發文 304
  註冊 2005-9-6
  狀態 離線
#2  

prefetch說明
 那是WindowXP系統在開機或你執行程式的時候,會將程式的一部份放
 在c:\windows\prefetch的目錄下,當你要執行這些程式的時候,就可以
 很快的開啟,大大的加速程式執行。

 若你的電腦的記憶體有512MB以上,硬碟空間又夠,不用理會這些檔案
 如果很討厭Windows亂加檔案,請在開始=>執行=>regedit

修改
 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
 \Session Manager\Memory Management\PrefetchParameters
 更改EnablePrefetcher這個機碼
 0 關閉
 1 prefetch應用程式
 2 prefetch開機程式
 3 prefetch 所有程式

PS.有些應用程式的捷徑會強制prefetch,C:\program files\xxxx.exe" /prefetch:1


2005-12-27 03:22 AM
查看資料  發短消息   編輯文章  引用回覆
  juaxe
  中級會員 
 



  積分 1026
  發文 161
  註冊 2005-12-14
  來自 taiwan
  狀態 離線
#3  

太好的知識--有義務推--感謝

2006-1-5 10:44 AM
查看資料  發短消息   編輯文章  引用回覆
  都不懂
  VIP會員 
 



 
  積分 6862
  發文 536
  註冊 2005-9-5
  狀態 離線
#4  

感謝大大的指導
有點硬,要慢慢消化




感謝大大無私的分享!
給你拍拍手,給你放煙火!
2006-2-18 12:06 PM
查看資料  發短消息   編輯文章  引用回覆

可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題

論壇跳轉選單: