引用:
|
作者bureia
之前在站上有談過,狀況是當時intel compiler會偵測非intel的CPU然後只能跑最保守的代碼。
其實照規矩應該用CPUID確認功能有沒有支援就可以,不該偵測品牌
記得後來intel compiler把偵測品牌的步驟拿掉了
那篇作者是在討論兩家CPU架構設計上的不同,他的論點我的解讀是
intel有專門強化AVX的運算效能,然後AMD的AVX其實是2個SSE拼出來的,
所以AMD的AVX效能比intel差很多
然後兩家在SSE跟基本x86指令的效能差不多,但是AMD給的資源比較多(較多核心、HT等)
所以跑分跑起來AMD得分較高
但是軟體有對AVX最佳化的話,intel的效能會高出AMD一截
如果只用SSE跟基本x86指令的話AMD會吃香一點,不過他也說這種軟體對多核心支援
通常不佳,那AMD的多核跟HT也佔不到多大便宜
|
我覺得那個人是白ㄘ
這個東西我剛看爛而已,所以我很清楚 會這樣講的 代表說的人 根本看不懂 opcode 也不知道指令集到底是什麼東西
你說的 軟體有對AVX最佳化 光這個就打槍打到死
編譯的時候 指令已經編在軟體裡面了 還有 軟體有對AVX最佳化 這種說法? 代表根本就是不懂裝懂
「AMD的AVX其實是2個SSE拼出來的」?
那 AMD 的 CPU 也跟我寫的東西一樣 用模擬出來的嗎
為什麼會說 AVX 比 SSE 指令集效能更好,那我跟你說 不一定
AVX 有包含 VEX 編碼的 SSE 指令 說 AVX 效能比 SSE 好,是指 SSE 指令只有2到3個操作數
AVX VEX 版本 編碼的 SSE 指令可以有 3-4個操作數,
我舉個例就好了
https://www.felixcloutier.com/x86/palignr
SSSE3 的指令 PALIGNR
SSSE3 版本:
PALIGNR xmm1, xmm2, imm8
modrm.reg / modrm.r/m imm8 共計三個操作數
opcode 佔用 6 byte
66 0F 3A 0F C2 01
AVX (VEX) 編碼版本:
(V)PALIGNR xmm1, xmm2, xmm3, imm8
modrm.reg / vex.v / modrm.r/m imm8 共計四個操作數
opcode 佔用 5或6 byte
C4 XX XX 0F XX 01
或
C5 XX 0F XX 01
說好壞是只同一個指令 AVX 版本 比 SSE 版本 佔用比較少的 Byte。
另外 AVX 還有 VEX.256 的版本 可以一次處理 32 byte 的資料 一次搞定
SSE 版本最多只有 128-bit 只能處理 16-byte 好就好在這裡而已
