Frage

ich tun muß Prozessor-Unterstützung für SSE2 vor der Installation einer Software zu bestimmen. Von dem, was ich verstehe, kam ich mit auf den Punkt:

bool TestSSE2(char * szErrorMsg)
{
    __try 
    {
        __asm 
        {
              xorpd xmm0, xmm0        // executing SSE2 instruction
        }
    }
        #pragma warning (suppress: 6320)
        __except (EXCEPTION_EXECUTE_HANDLER) 
        {
            if (_exception_code() == STATUS_ILLEGAL_INSTRUCTION) 
            {
                _tcscpy_s(szErrorMsg,MSGSIZE, _T("Streaming SIMD Extensions 2(SSE2) is not supported by the CPU.\r\n Unable to launch APP"));
                return false;

            }
        _tcscpy_s(szErrorMsg,MSGSIZE, _T("Streaming SIMD Extensions 2(SSE2) is not supported by the CPU.\r\n Unable to launch APP"));
        return false;
        }   
    return true;
}

Würde das funktionieren? Ich bin mir nicht wirklich sicher, wie zu testen, da meine CPU unterstützt, so dass ich nicht bekommen, falsch aus dem Funktionsaufruf.

Wie kann ich feststellen Prozessor-Unterstützung für SSE2?

War es hilfreich?

Lösung

Rufen CPUID mit EAX = 1 die Funktion Flags um edx zu laden. Bit 26 wird gesetzt, wenn SSE2 zur Verfügung steht. Einige Code zu Demonstrationszwecken mit MSVC ++ Inline-Assembler (nur für x86 und nicht tragbar!):

inline unsigned int get_cpu_feature_flags()
{
    unsigned int features;

    __asm
    {
        // Save registers
        push    eax
        push    ebx
        push    ecx
        push    edx

        // Get the feature flags (eax=1) from edx
        mov     eax, 1
        cpuid
        mov     features, edx

        // Restore registers
        pop     edx
        pop     ecx
        pop     ebx
        pop     eax
    }

    return features;
}

// Bit 26 for SSE2 support
static const bool cpu_supports_sse2 = (cpu_feature_flags & 0x04000000)!=0;

Andere Tipps

Ich fand diese einen nach dem Unfall in der MSDN :

BOOL sse2supported = ::IsProcessorFeaturePresent( PF_XMMI64_INSTRUCTIONS_AVAILABLE );

nur für Windows, aber wenn Sie nicht daran interessiert sind, etwas plattformübergreifende, sehr einfach.

Die einfachste Art und Weise für SSE2-Unterstützung zu überprüfen, ist durch die CPUID Anweisung verwendet wird (auf Plattformen, wo es verfügbar ist). Entweder mit Inline-Assembler oder mit Compiler-Spezifika.

Sie können die _cpuid-Funktion verwenden. Alle in der MSDN .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top