#採用cpuid、_cpuid、_cpuidex函式可獲取cpu特徵,但這三個函式的使用函式有一定的限制與要求:
a. 32位作業系統
在32位作業系統下,可以直接採用內嵌會變調用cpuid函式獲取cpu特徵,方法如下
//用於儲存cpu四個暫存器值
unsigned long _eax, _ebx, _ecx, _edx;
void excutecpuid() }
b. 64位作業系統直接呼叫呼叫intrinsics函式「_cpuid、_cpuidex」函式獲取cpu特徵。但是只有vc2005以上版本才有intrin.h標頭檔案,且支援_cpuid函式,vc2010版本以上才支援_cpuidex函式,所以我們首先通過編譯器版本確定標頭檔案包含和指令呼叫,vc編譯器版本判斷如下
//_msc_ver是微軟c/c++編譯器——cl.exe編譯**時預定義的乙個巨集,它的值表示cl的版本,它的型別是「int」。例如
#if _msc_ver >=1200 // vc++6.0以上
#if _msc_ver >=1300 // vc2003以上
#if _msc_ver >=1400 // vc2005以上
#if _msc_ver >=1500 // vc2008以上
#if _msc_ver >=1600 // vc2010以上
總結a、 b兩點,**為
->>#if defined _msc_ver >= 1400 //vc版本為2005以上
->>#include 「intrin.h」
->> #endif
->>#if defined (_win64)
//64為作業系統,直接呼叫」intrin.h」中函式
->> #else
#if _msc_ver < 1600
->>void __cpuidex(int32 cpuinfo[4], int32 infotype, int32 ecxvalue)
->>
} ->>#endif // #if _msc_ver < 1600
->> #if _msc_ver < 1400
->>void __cpuid(int32 cpuinfo[4], int32 infotype)
->>
->>#endif // #if _msc_ver < 1400 // vc2005才支援__cpuid
->>#endif // #if defined(_win64)
#cpu特徵對應的sse指令集
1. edx: (bit23) == 1 —————mmx
2. edx: (bit25) == 1 —————sse1
3. ecx: (bit26) == 1 —————sse2
4. ecx: (bit0 ) == 1 —————sse3
5. ecx: (bit9 ) == 1 —————ssse3
6. ecx: (bit19) == 1 —————sse4.1
7. ecx: (bit20) == 1 —————sse4.2
SSE指令的使用學習
1.什麼是指令集?指令集是為了增強cpu在某些方面 如多 的功能而特意開發出的一組程式 集合。2.常見的指令集有哪些呢?1 mmx multi media extensions,做 擴充套件 指令集 intel1996年推出的一項多 指令增強技術。共包含57條多 指令,這些指令一次可以處理多個資料。...
SSE的指令系統
sse的指令系統 sse2和sse的指令系統非常相似,僅僅多了少量額外的浮點運算,64位浮點 整數運算支援 sse比傳統浮點運算要快,因為它使用128位儲存單元。在windows使用 include 在linux下使用 include 1.變數定義和使用 m128 s1 s1.m128 f32 2 ...
影響上傳速度的因素
http上傳 客戶端 上傳資料 到伺服器。上傳速度決定於 1 客戶端,2 伺服器,3 路由 1 客戶端 1.1.是否保持長連線,對於多個小檔案的上傳,保持同乙個連線非常有效 1.2.連線數,過多或過少都不好 1.3.傳送資料的粒度大小 1.4.讀檔案的效率,最好非同步讀檔案,先將資料快取好,待傳送資...