精華區beta Programming 關於我們 聯絡資訊
※ 引述《freaky.bbs@ptt.cc (jon)》之銘言: > 這個缺點在 .net 2.0 有改進。現在 dependencies 的 structral information > 已經不會包含在 NGENed 的 native image 裡面,而是存放在 registry, > 所以不會因為 reference 到的 assembly 版本有所變更就需要改用 JIT。 嗯,MS 改進這個缺點的確是值得令人給予鼓勵的。 不過 NGen 終究還是沒辦法突破這個原則: 「無法在編譯期預知的,在 Pre-JIT 時也無從預知」 這個問題其實已經算是一種註定的命運了, 有最接近 100% 準確率的會贏一些, 被硬體直接支援可以猜錯又不會有太大 penalty 的一方會贏很多; 除此之外 NGen/JIT 雖然產生出來的也是 native code, 但是由它們所產生出來的 native code 純淨度就不是那麼高, 難免比傳統 compile 方式產生出來的 native code 多一些雜質, 畢竟 NGen/JIT 並非超級 AI, 而且生出來的 native code 依然要照 .NET 的規矩走, native code 的純淨度下降是無可避免的。 輸入 profiling 結果來提昇預測準確率已經成為傳統 compiler 界的默契, 甚至很多硬體已經針對傳統 compiler 這項特性設計了回復預測失敗時專用的電路, 大大的拉遠了 Pre-JIT 跟傳統 compile 方式在這方面的速度差異, JIT 的好處是可以即時獲得動態資訊自動進行微調, Pre-JIT 就失去了這項特色(雖然也可以學傳統方式拿 profiled data 改進), 而選用純粹的 JIT 方式卻又不能跑太多 phases 的 machine-dependent 最佳化, 而且 profling 本身的動作也是一項 overhead, 說是被強迫選擇折斷一隻手真的不為過... 傳統 compile 方式雖然容易被小陷阱割到刺到, 倒也不至於發生這種非得被砍掉一隻手的抉擇, 而且每當一落入這樣的處境時, 因為它和 machine 之間沒有一個中間層, 所以總是很容易獲得硬體廠商的救援而不致落得殘廢的下場, 預測電路的出現算是一個很具代表性的例子。 並不是說軟體上很難打贏才搬出硬體來拼, 而是目前的現狀的確還是如此; 至於 Java chip 這東西真的是比較有威脅性一點, 因為 Java bytecode 太靠近 native code 那一端, 讓 Java chip 能被設計得很簡單而且容易執行 Java bytecode, NET 距離 native code 比 Java bytecode 稍遠了些, 所以我想它要搞出 .NET chip 來 support 可能效果會輸給 Java chip。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Chung Cheng University Department: Computer Science and Information Engineering Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-137-182.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩