![]() |
||
Regular Member
![]() ![]() 加入日期: Oct 2001 您的住址: 普隆達星
文章: 51
|
如何用RAMDISK加快compile程式碼的效率?
(已爬過http://www.pcdvd.com.tw/showthread.php?t=554130&page=1&pp=40&highlight=ramdisk)
小弟因為工作的關係, 接下來要compile的code (C base)解開壓縮居然佔了1xx MB, 用舊電腦(P4 2.66 without HT + 768 Mb ram + IDE HDD)居然要10多分鐘, 這樣一個小時含改code不就最多compile 3次.... 所以後來換了一台拼裝新電腦, 大致如下 AMD opteron 1220 2.8G daul core 4G ddr2 667 unbuffer dimm ECC(windows XP 只抓的到3G, 公司政策用XP...) nVidia MCP55pro WD 120G(SATA2 for system) + hitachi 250G(sata2 for Data) 換了電腦以後果然順利把compile的時間縮短到5分鐘 但是好景不長, 三天後就越來越不能忍受只要按下build all的按鈕就要去上廁所倒水泡咖啡... 於是想動ramdisk的主意, 裝了RamdiskXP(忘記廠商和版本了 之後補上), 把開code的tool、code還有masm615搬到ramdisk(768M)裡(M$ .net還在C ![]() 時間縮短為4分鐘 個人觀察compile時CPU loading約60%~80%, 並無滿載 幾個疑問想請教: 1.ramdisk不是應該比HDD快很多嗎? 怎麼只省了20%? 2.嘗試把M$ .net也搬到ramdisk(1500MB)裡並修改compile的批次檔把路徑指到ramdisk 可以compile可是時間一樣是4分鐘, 幾乎所有會用到的都搬過去了, 瓶頸在哪呢? 3.另一台類似的電腦, 沒裝ramdisk為什麼時間卻也是4分鐘呢? 配備如下: AMD opteron 1218 2.6G daul core 4G ddr2 667 unbuffer dimm ECC(windows 2003 enterprise sp2) nVidia MCP55pro WD 120G(SATA1 for system and data) 4.各位有沒有什麼建議的程式或配置方式可以建議一下, 例如小弟認真的看了supercacheII的討論, 但不知道怎麼設定才會對小弟的case有幫助. 小弟的同事有裝了一台intel Xeon Daul socket (8core)+1G FB dimm 的平台, CPU也沒有滿載(應該的吧-_-).時間也差不多...供各位參考 歡迎各位大大不吝指教. (還是說我應該貼去系統組件或是效能極限?) 此文章於 2007-04-26 12:59 AM 被 enrico 編輯. |
|||||||
![]() |
![]() |
Major Member
![]() 加入日期: Feb 2007
文章: 125
|
100MB 代表速度不是卡在 disk 那邊
瓶頸出在 CPU 運算吧 CPU bound 的程式 |
||
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Oct 2001 您的住址: 普隆達星
文章: 51
|
引用:
願聞其詳 如果出在CPU的運算的話不是應該佔滿CPU的loading嗎? ![]() |
|
![]() |
![]() |
Major Member
![]() 加入日期: Feb 2007
文章: 125
|
引用:
不一定啊 CPU 有許多邏輯單元 但是你的程式並不一定會全用上這些邏輯單元啊 比如說你的程式沒有浮點數 或者是3D的部份 沒有到當然就不會算進負載囉 我例子舉的不好啦 不過我想你應該能了解 |
|
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Dec 2001
文章: 1,747
|
小弟說說自己的感覺:
雙核心 CPU 其實不見得能夠用到 100%, 如果Compiler 沒有針對雙核心作最佳化的話. 這時候看到的就是 "明明 CPU 只使用 60%, 結果卻怎麼樣都無法更快了" 另外, 從程式角度來說, 有些工作可能是這樣的症狀. "A處理完畢之後才能夠處理B, 雖然AB分配給兩顆不同 CPU, 但是第一顆 CPU 忙碌時, 第二顆 CPU 卻接不到新工作, 等到第一顆跑完之後, 第二顆才開始忙碌... 但是反過來說第一顆 CPU 又開始等待 B 處理完畢才能夠繼續處理 C" 那就算是 ABC 都分開不同 CPU 還是不比單一顆 CPU 快. 另外, 如果你的系統還希望更快的話, 可能要針對 Compiler 下手了. (Ex: 調整 Compiler 參數, 找新版本的 Compiler, 找更貴的 Compiler.等等)
__________________
免費免註冊薪資行情查詢 - 人力銀行最討厭的網站... |
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Oct 2001 您的住址: 普隆達星
文章: 51
|
引用:
CPU 在compile的過程中會有幾次衝到100%, 不過都維持一秒鐘左右, 我曾經盯著task manager看cpu loading到compile結束 很少有第一個core很忙但第二個core沒事做的情形 幾乎都差不多忙(60%~80%之間來回) compiler我不知道要怎麼下手耶 除了vendor提供的幾個程式外其他的幾乎都是批次檔去compile .C file... |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Oct 2001 您的住址: 普隆達星
文章: 51
|
引用:
1.是.Net 2003, 為什麼要用2003我也不知道(這方面我不是很懂, 以前的code是單純的組合語言) 2.其實灌.net 是為了要用裡面的函示庫的樣子, 程式的架構我也不知道怎麼描述, 因為我才拿到手三天, 還在摸索(之後要用所以要先學). 3.所以大家都認為跟硬體無關嗎?(我只是想釐清) 感謝大家提供意見 ![]() |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Sep 2003 您的住址: Taipei
文章: 89
|
請問你的系統環境變數"Tmp"有設到RAMDISK目錄下嗎?有改的話應該會再快一點。
另外如果程式能改用Precompiled Header的話也能加快編譯的速度。 又 用批次檔可能也是問題所在,每次修改不一定要全部程式都要重新編譯, 如果能改用makefile設定好程式的相依性, 或是將舊程式建立為VS的專案,讓VS管理哪些程式須重編譯, 這樣編譯效率會更好。 提供一點過去的經驗,請參考看看。 |
![]() |
![]() |
Basic Member
加入日期: Feb 2005
文章: 23
|
引用:
以我參予的一些專案來說 程式的架構 影響效能比較多一點 硬體除非是針對特定COMPILER 最佳化 不然差異 不會 從 一個小時 縮短到 10分鐘 但是架構上 可以 以你的情況 跟硬體沒什麼關係 了解他的架構 在自己拆成小fOUNCTION 這樣可以 加速你執行速度
__________________
真相 |
|
![]() |
![]() |