دعم؟
الإجابة:
الحل:
// Windows
#Define Cpuid (Info ، x) __cpuidex (info ، x ، 0)
#آخر
// الجوهبات العالمية
#include
Void Cpuid (int info [4] ، int infotype) {
__cpuid_count (infotype ، 0 ، info [0] ، info [1] ، info [2] ، info [3]) ؛
}
#endif
// MISC.
BOOL HW_MMX ؛
BOOL HW_X64 ؛
BOOL HW_ABM ؛ // معالجة بت متقدمة
BOOL HW_RDRAND ؛
BOOL HW_BMI1 ؛
BOOL HW_BMI2 ؛
BOOL HW_ADX ؛
BOOL HW_PREFETCHWT1 ؛
// SIMD: 128 بت
Bool HW_SSE ؛
BOOL HW_SSE2 ؛
BOOL HW_SSE3 ؛
BOOL HW_SSSE3 ؛
BOOL HW_SSE41 ؛
BOOL HW_SSE42 ؛
BOOL HW_SSE4A ؛
Bool HW_AES ؛
BOOL HW_SHA ؛
// SIMD: 256 بت
BOOL HW_AVX ؛
BOOL HW_XOP ؛
BOOL HW_FMA3 ؛
BOOL HW_FMA4 ؛
BOOL HW_AVX2 ؛
// SIMD: 512 بت
BOOL HW_AVX512F ؛ // AVX512 Foundation
BOOL HW_AVX512CD ؛ // AVX512 اكتشاف الصراع
BOOL HW_AVX512PF ؛ // avx512 prefect
BOOL HW_AVX512ER ؛ // AVX512 المتبادل الأسي
BOOL HW_AVX512VL ؛ // AVX512 امتدادات طول المتجه
BOOL HW_AVX512BW ؛ // AVX512 BYTE WORD
BOOL HW_AVX512DQ ؛ // avx512 Quadword doubleword
BOOL HW_AVX512IFMA ؛ // AVX512 INTEGER 52-BIT تنصهر مضاعفة مضاعفة
BOOL HW_AVX512VBMI ؛ // AVX512 تعليمات معالجة بايت المتجه
Int Info [4] ؛
CPUID (معلومات ، 0) ؛
int nids = info [0] ؛
CPUID (info ، 0x80000000) ؛
nexids غير موقعة = info [0] ؛
// اكتشاف الميزات
if (nids> = 0x00000001) {
CPUID (معلومات ، 0x00000001) ؛
hw_mmx = (info [3] & ((int) 1 = 0x00000007) {
CPUID (info ، 0x00000007) ؛
hw_avx2 = (info [1] & ((int) 1 = 0x80000001) {
CPUID (معلومات ، 0x80000001) ؛
hw_x64 = (info [3] & ((int) 1 باستخدام هذه الطريقة ، يمكنك تحديد ما إذا كانت وحدة المعالجة المركزية تدعم تعليمات SSE3 عن طريق التحقق من متغير Boolean HW_SSE3 بعد تنفيذ الكود. لاستخدام هذه الإرشادات بالفعل في الكود الخاص بك ، قد تحتاج إلى إجراء تعديلات بناءً على لغة البرمجة المحددة ونظام التشغيل الذي تستخدمه.