瀏覽單個文章
bureia
Golden Member
 

加入日期: Dec 2001
文章: 2,914
引用:
作者とらちよ
CPU 的指令集都是 for OS / APP 的
並不是增進效能
我舉一個例子:
應用程式編譯後 都是二進位檔案
一個編譯好的APP 裡面全部都是包含 X86 MMX SSEX... 的操作代碼(opcode)
如果你的處理器缺少某些指令 而應用程式有這個指令 就會造成 CPU 無法辨識這個操作代碼 然後造成應用程式無法執行 異常退出
假設 CPU 缺少 CX16的指令功能
CX16 ( CMPXCHG16B ) 的編碼16進位是 0F C7
那執行應用程式時 CPU 讀到 0F C7 的編碼 就會無法辨識指令
所有指令集為此而生 與加速無關

硬跑不支援的指令本來就會Runtime Error,
所以才說要執行這些指令集之前要檢查CPUID啊
不支援的話可以另外寫不支援的Code,而且通常都會這樣做

至於跟增加效能有沒有關係,
只要查查當初MMX跟3DNow!,SSE是為了什麼加進去的就知道了

有興趣可以去翻Intel官方的x86組合語言撰寫手冊就知道了,有免費的PDF可以下載

而且對這些指令集的最佳化通常也是軟體開發最後才加入,
大多都先生出一套基本x86指令集能跑的東西,之後看效能瓶頸在哪,
再使用MMX,SSE之類的指令集去改善
舊 2015-04-24, 10:40 PM #116
回應時引用此文章
bureia離線中