Seite 2 von 2

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 14.09.2010 12:40
von Thorium
Ich denke das wird weggelassen da SSSE3 eine erweiterung von SSE3 ist. Also kann die CPU SSSE3 kann sie automatisch auch SSE3.
Nichtsdesdotrotz ist die angabe die du bekommst falsch. Denn das Feld heisst nicht "supported instruction sets" sondern "flags". Und das SSE3 flag ist offensichtlich gesetzt.

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 23.02.2015 18:32
von Autonomus
In dem Beitrag von Thorium steht ja bereits "... unterstützen Intel-SIMD-Instruktionssätze ...".
Heißt dass das diese Prüfungen nur bei Intel-CPUs korrekt funktionieren?

Denn laut Debug-Ausgabe unterstützt meine CPU (AMD) nur MMX, SSE, SSE2, SSE3, kein SSSE3 oder SSE4.1 / SSE4.2.
Thorium hat geschrieben:Nagut hier hast du ein paar Prozeduren um die unterstützten Intel SIMD-Instruktionssätze zu ermitteln.

Der Code ist x86 und x64 kompatibel und OS-unabhängig.

Code: Alles auswählen

Procedure.i IsCpuidSupported()
  
  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86
  
      !pushfd
      !pop eax
      !mov edx,eax
      !xor eax,$00200000
      !push eax
      !popfd
      !pushfd
      !pop eax
      !xor eax,edx
      !jne IsCpuidSupported_Supported
      !xor eax,eax
      
      ProcedureReturn
      
      !IsCpuidSupported_Supported:
      !mov eax,1
      
      ProcedureReturn
      
    CompilerCase #PB_Processor_x64
      
      ProcedureReturn #True
      
  CompilerEndSelect

EndProcedure

Procedure.i IsMmxSupported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test edx,$00800000
      !jne IsMmxSupported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsMmxSupported_Supported:
      !mov eax,1
      
      ProcedureReturn
    
    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test edx,$00800000
      !jne IsMmxSupported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsMmxSupported_Supported:
      !mov rax,1
      
      ProcedureReturn
    
  CompilerEndSelect

EndProcedure

Procedure.i IsSseSupported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test edx,$02000000
      !jne IsSseSupported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsSseSupported_Supported:
      !mov eax,1
      
      ProcedureReturn
    
    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test edx,$02000000
      !jne IsSseSupported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsSseSupported_Supported:
      !mov rax,1
      
      ProcedureReturn
    
  CompilerEndSelect

EndProcedure

Procedure.i IsSse2Supported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test edx,$04000000
      !jne IsSse2Supported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsSse2Supported_Supported:
      !mov eax,1
      
      ProcedureReturn
    
    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test edx,$04000000
      !jne IsSse2Supported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsSse2Supported_Supported:
      !mov rax,1
      
      ProcedureReturn

  CompilerEndSelect

EndProcedure

Procedure.i IsSse3Supported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test ecx,$00000001
      !jne IsSse3Supported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsSse3Supported_Supported:
      !mov eax,1
      
      ProcedureReturn

    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test ecx,$00000001
      !jne IsSse3Supported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsSse3Supported_Supported:
      !mov rax,1
      
      ProcedureReturn

  CompilerEndSelect

EndProcedure

Procedure.i IsSsse3Supported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test ecx,$00000200
      !jne IsSsse3Supported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsSsse3Supported_Supported:
      !mov eax,1
      
      ProcedureReturn

    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test ecx,$00000200
      !jne IsSsse3Supported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsSsse3Supported_Supported:
      !mov rax,1
      
      ProcedureReturn

  CompilerEndSelect

EndProcedure

Procedure.i IsSse41Supported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test ecx,$00080000
      !jne IsSse41Supported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsSse41Supported_Supported:
      !mov eax,1
      
      ProcedureReturn

    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test ecx,$00080000
      !jne IsSse41Supported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsSse41Supported_Supported:
      !mov rax,1
      
      ProcedureReturn

  CompilerEndSelect

EndProcedure

Procedure.i IsSse42Supported()

  CompilerSelect #PB_Compiler_Processor

    CompilerCase #PB_Processor_x86

      !mov eax,1
      !push ebx
      !cpuid
      !pop ebx
      !test ecx,$00100000
      !jne IsSse42Supported_Supported
      !xor eax,eax
      
      ProcedureReturn
    
      !IsSse42Supported_Supported:
      !mov eax,1
      
      ProcedureReturn

    CompilerCase #PB_Processor_x64

      !mov rax,1
      !push rbx
      !cpuid
      !pop rbx
      !test ecx,$00100000
      !jne IsSse42Supported_Supported
      !xor rax,rax
      
      ProcedureReturn
    
      !IsSse42Supported_Supported:
      !mov rax,1
      
      ProcedureReturn

  CompilerEndSelect

EndProcedure

If IsCpuidSupported() = #True
  
  Debug "MMX: " + Str(IsMmxSupported())
  Debug "SSE: " + Str(IsSseSupported())
  Debug "SSE2: " + Str(IsSse2Supported())
  Debug "SSE3: " + Str(IsSse3Supported())
  Debug "SSSE3: " + Str(IsSsse3Supported())
  Debug "SSE4.1: " + Str(IsSse41Supported())
  Debug "SSE4.2: " + Str(IsSse42Supported())
  
EndIf

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 23.02.2015 18:49
von Andreas21
Welchen CPU genau hast du von AMD?
Nicht alle unterstützen SSSE3.

Aus Wikipedia:
CPUs mit SSSE3
Intel Atom (alle Prozessoren)
Intel Celeron (ab Prozessorkern Conroe-L)
Intel Celeron M (ab Prozessorkern Merom-1024)
alle Prozessoren der Intel-Core-2-Serie
alle Prozessoren der Intel-Core-i-Serie
Intel Pentium Dual-Core
Intel Xeon (ab Prozessorkern Woodcrest)
VIA Nano
AMD Bulldozer
AMD Fusio
n
http://de.wikipedia.org/wiki/Supplement ... tensions_3
SSE4 (Streaming SIMD Extensions 4) ist eine Befehlssatzerweiterung, die bei AMD seit K10 und bei Intel seit der Penryn-Variante der Core-2-Prozessoren verwendet wird. Der zweite Teil, SSE4.2 genannt, wurde mit der Intel-Nehalem-Mikroarchitektur eingeführt.

Intel SSE4 besteht aus 54 Befehlen. Der erste Teil von 47 Befehlen erschien unter den Namen SSE4.1. Darüber hinaus erschienen noch einmal sieben Befehle als SSE4.2 ab Core i7 ab der Variante Nehalem.

AMD fügte anstelle dessen mit der K10-Architektur vier eigene Befehle hinzu und veröffentlichte diesen Instruktionssatz unter dem Namen SSE4a. Die Prozessoren der Bulldozer-Mikroarchitektur, die im Oktober 2011 veröffentlicht wurden, unterstützen zusätzlich zu SSE4a auch SSE4.1 und 4.2 vollständig. Intel-Prozessoren unterstützen im Gegenzug die SSE4a-Befehle bis heute nicht.
http://de.wikipedia.org/wiki/Streaming_ ... tensions_4
CPUs mit SSE4a
AMD Phenom
AMD Opteron
AMD Athlon II
AMD Phenom II
AMD FX
AMD A-Series
http://de.wikipedia.org/wiki/SSE4a

Und was SSE5 angeht.
http://de.wikipedia.org/wiki/Streaming_ ... tensions_5

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 23.02.2015 19:16
von Autonomus
AMD Athlon 64 X2 Dual Core Processor 5000+

Demnach wäre die von Thorium geschriebene Prüfung für Intel als auch für AMD CPUs möglich, sofern die CPUs das unterstützen?

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 24.02.2015 15:21
von Thorium
Autonomus hat geschrieben: Demnach wäre die von Thorium geschriebene Prüfung für Intel als auch für AMD CPUs möglich, sofern die CPUs das unterstützen?
Ja.
Ich habe "Intel" geschrieben, weil die AMD-spezifischen Erweiterungen nicht abgefragt werden.
CPUID sollte bei AMD und Intel gleich sein.

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 24.02.2015 17:05
von Autonomus
Danke für deine Antwort Thorium.

Gibt es irgendwo eine Liste mit allen Befehlssätze und deren Speicheradressen?
Hab den Code von Thorium mal übernommen und um 3 weitere Abfragen erweitert.
Mir fehlen aber noch einge Speicheradressen wie PAE, NX-Bit, ...

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 24.02.2015 17:45
von Thorium
Autonomus hat geschrieben: Gibt es irgendwo eine Liste mit allen Befehlssätze und deren Speicheradressen?
Natürlich. Es gibt ein Handbuch von Intel allein zur CPUID Instruktion. Da lässt sich eigentlich alles über die CPU ermitteln.
Für die AMD spezifischen Sachen, muss man in die AMD-Handbücher schauen.

Das Handbuch heisst: Intel Processor Identification and the CPUID Instruction
Und kann auf der Intel Seite als PDF runtergeladen werden.

Re: Wie herausfinden, ob die CPU SSE5 kann?

Verfasst: 24.02.2015 18:43
von Autonomus
Super, vielen Dank!

Habe soetwas ähnliches schon versucht über Google zu finden, woraufhin ich aber scheinbar ein lustiges "AMD User Manual" gefunden habe, was offensichtlich kein "User Manual" für die öffentlichkeit war, wie ein normales "Benutzerhandbuch".

Naja, nochmals danke für diese hilfreiche Information.