«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Точно проверяет ли фрагмент кода в описании задачи.

Точно проверяет ли фрагмент кода в описании задачи.

Опубликовано в 2025-03-22
Просматривать:426

Does the Code Snippet Provided in the Problem Description Accurately Check for SSE3 Instruction Set Support?

Как определить поддержку CPU для набора инструкций SSE3

Вопрос:

- код, предусмотренная в задаче. Support?

решение:

вот более надежный метод для обнаружения поддержки CPU для SSE3 и различных наборов инструкций:

code:

#ifdef _win332 // окна #define cpuid (info, x) __cpuidex (info, x, 0) #еще // GCC Intrinsics #include void cpuid (int info [4], int infotype) { __cpuid_count (Infotype, 0, Info [0], Info [1], Info [2], Info [3]); } #endif // Разное. 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 Фонд bool hw_avx512cd; // Обнаружение конфликтов AVX512 bool hw_avx512pf; // AVX512 Предварительная перефшита bool hw_avx512er; // avx512 экспоненциальный взаимный bool hw_avx512vl; // AVX512 расширения векторной длины bool hw_avx512bw; // Byte Word AVX512 bool hw_avx512dq; // avx512 DoubleWord Quadword bool hw_avx512ifma; // avx512 целое число 52-битное слитое сплановое добавление bool hw_avx512vbmi; // avx512 Инструкции по манипуляции с вектором int info [4]; CPUID (информация, 0); int nids = info [0]; CPUID (информация, 0x80000000); unsigned nexids = info [0]; // обнаружить функции if (nids> = 0x00000001) { CPUID (информация, 0x00000001); Hw_mmx = (info [3] & ((int) 1 = 0x00000007) { CPUID (информация, 0x00000007); Hw_avx2 = (info [1] & ((int) 1 = 0x80000001) { CPUID (информация, 0x80000001); Hw_x64 = (info [3] & ((int) 1

Используя этот метод, вы можете определить, поддерживает ли ЦПР инструкция SSE3 путем проверки логической переменной hw_sse3 после выполнения кода.

Примечание:
#ifdef _WIN32

//  Windows
#define cpuid(info, x)    __cpuidex(info, x, 0)

#else

//  GCC Intrinsics
#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;      // Advanced Bit Manipulation
bool HW_RDRAND;
bool HW_BMI1;
bool HW_BMI2;
bool HW_ADX;
bool HW_PREFETCHWT1;

//  SIMD: 128-bit
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-bit
bool HW_AVX;
bool HW_XOP;
bool HW_FMA3;
bool HW_FMA4;
bool HW_AVX2;

//  SIMD: 512-bit
bool HW_AVX512F;    //  AVX512 Foundation
bool HW_AVX512CD;   //  AVX512 Conflict Detection
bool HW_AVX512PF;   //  AVX512 Prefetch
bool HW_AVX512ER;   //  AVX512 Exponential   Reciprocal
bool HW_AVX512VL;   //  AVX512 Vector Length Extensions
bool HW_AVX512BW;   //  AVX512 Byte   Word
bool HW_AVX512DQ;   //  AVX512 Doubleword   Quadword
bool HW_AVX512IFMA; //  AVX512 Integer 52-bit Fused Multiply-Add
bool HW_AVX512VBMI; //  AVX512 Vector Byte Manipulation Instructions

int info[4];
cpuid(info, 0);
int nIds = info[0];

cpuid(info, 0x80000000);
unsigned nExIds = info[0];

//  Detect Features
if (nIds >= 0x00000001){
    cpuid(info, 0x00000001);
    HW_MMX    = (info[3] & ((int)1 = 0x00000007){
    cpuid(info, 0x00000007);
    HW_AVX2   = (info[1] & ((int)1 = 0x80000001){
    cpuid(info, 0x80000001);
    HW_x64   = (info[3] & ((int)1  

. Чтобы фактически использовать эти инструкции в вашем коде, вам может потребоваться внести коррективы на основе конкретного языка программирования и операционной системы, которую вы используете.

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3