My friends, my life, my style - James S.F. Hsieh

1/20/2009

x64 Part 1: x86-32 vs x86-64

在過去, 從 286 到 386, Win16 到 Win32 的 Migration 過程中 (1986~1998), 許多的東西有了重大的改變, 從 CPU Registers 大小的倍增, 支援 4GB 的定址與 Paging, 以至於對程式有了保護模式 (Ring0-3) 與多功的支援, 而作業系統不僅從 Data Model 到軟體層的 API 更是徹頭徹尾的改變, 相信這些改變一定奪去不少 RD 的甜美睡眠, 而改變又將到來 (2003~NOW), 那麼在 CPU方面 x86-64 (Intel Xeon ~ Intel Corei7 and Atom, Long mode) 多了些什麼呢? 至於 IA64 就暫時不討論了

  • 8 additional registers R8~R15 and 8 additional registers for SIMD XMM8~XMM15
  • 64-bit integer support: GPRs and IP are expanded to 64 bits
  • Larger virtual and physical address space
  • A new instruction-pointer relative-addressing mode
  • No-Execute bit memory protection
  • Removal of older features: x87, MMX, 3DNow!
  • Fast interrupt-prioritization mechanism

那對於Windows 與軟體方面 x64 (Windows XP Professional x64 Edition ~ Vista 64) 又做了哪方面的改變呢?

至於這些改變目前有哪些好處呢? 其實大多都跟記憶體有關

  • OS 可以使用的實體記憶體增加, 可以同時執行更多的 Application
  • OS 可以使用的實體記憶體增加, 可以減少 swapping 的機率
  • Application 可以使用更大的定址空間 (超過3GB) 與 實體記憶體處理複雜的工作
  • 對 CPU-bound 的 Application 在效能方面有些許的改善 (ex: Adobe Lightroom 2.1 32-bit vs 64-bit), 但 I/O-bound 與 GPU-bound 則不會增加效能
  • memory-mapped file I/O 可以有夠大的定址空間

至於這些改變目前有哪些壞處呢?

  • Win64 只能使用 64-bit version 的 driver
  • 64-bit 與 32-bit 的 DLL 不能混用 (少數系統的 DLL 例外)
  • Win16 程式將不再被支援
  • Application 如果沒有針對 64-bit 做最佳化則速度會慢一點 (ex: Adobe Lightroom 2.0 32-bit vs 64-bit)

Wiki x86-64, Intel® 64 and IA-32 Architectures Software Developer's Manuals, x64 Primer, Getting Ready for 64-bit Windows, x64 Software Conventions, 24 Considerations for Moving Your Application to a 64-bit Platform, Windows versus Windows or 32-bit versus 64bit, Lightroom 2.1 32-bit 64-bit performance