Wie herausfinden, ob die CPU SSE5 kann?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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?
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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, ...
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: Wie herausfinden, ob die CPU SSE5 kann?

Beitrag 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.
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Antworten