Wie herausfinden, ob die CPU SSE5 kann?
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Wie herausfinden, ob die CPU SSE5 kann?
Hallo.
Es gibt ja die Möglichkeit, mit Assembler, !CPUID, ein bisschen hin- und herschieben und Register auslesen den Befehlssatz herauszufinden (MMX, 3DNow!, Ext3DNow!, SSE, SSE2, SSE3, SSSE3 (= SSE4), CMOVcc). Ist es auch möglich herauszufinden, ob die CPU SSE5-fähig ist?
Gruß, Mok.
Es gibt ja die Möglichkeit, mit Assembler, !CPUID, ein bisschen hin- und herschieben und Register auslesen den Befehlssatz herauszufinden (MMX, 3DNow!, Ext3DNow!, SSE, SSE2, SSE3, SSSE3 (= SSE4), CMOVcc). Ist es auch möglich herauszufinden, ob die CPU SSE5-fähig ist?
Gruß, Mok.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Re: Wie herausfinden, ob die CPU SSE5 kann?
Natürlich auch mit der CPUID Instruktion.Mok hat geschrieben:Hallo.
Es gibt ja die Möglichkeit, mit Assembler, !CPUID, ein bisschen hin- und herschieben und Register auslesen den Befehlssatz herauszufinden (MMX, 3DNow!, Ext3DNow!, SSE, SSE2, SSE3, SSSE3 (= SSE4), CMOVcc). Ist es auch möglich herauszufinden, ob die CPU SSE5-fähig ist?
Gibts SSE5 eigentlich schon? Intel will SSE5 ja sowieso nicht unterstützen.
Intel bietet ein entsprechendes Dokument mit allen Informationen über CPUID an: CPU Identification and the CPUID Instruction
AMD hat sicher vergleichbares, schau dich einfach mal bei Intel und AMD um, die bieten sehr viele Informationen, Dokumente und Handbücher. Unter anderem auch Optimierungsrichtlinien und Referenzimplementationen verschiedener Algos für die jeweiligen CPU's.
SSSE3 ist übrigens nicht SSE4, das gibts nochmal extra und ist in SSE4.1 und SSE4.2 unterteilt.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: Wie herausfinden, ob die CPU SSE5 kann?
OK, weißt du zufällig, wie man herausfindet, ob die CPU das kann, oder soll ich im Intel-Handbuch nachlesen?Thorium hat geschrieben:SSSE3 ist übrigens nicht SSE4, das gibts nochmal extra und ist in SSE4.1 und SSE4.2 unterteilt.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Re: Wie herausfinden, ob die CPU SSE5 kann?
Natürlich sollst du im Intel Handbuch nachlesen. ^^Mok hat geschrieben:OK, weißt du zufällig, wie man herausfindet, ob die CPU das kann, oder soll ich im Intel-Handbuch nachlesen?Thorium hat geschrieben:SSSE3 ist übrigens nicht SSE4, das gibts nochmal extra und ist in SSE4.1 und SSE4.2 unterteilt.
Aber weil ich so nett bin kann ich dir gerne den Link zum passenden Dokument geben:
http://www.intel.com/Assets/PDF/appnote/241618.pdf
SSE5 ist übrigens da noch garnicht drinnen, hab ich grad gesehen.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Re: Wie herausfinden, ob die CPU SSE5 kann?
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.
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
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: Wie herausfinden, ob die CPU SSE5 kann?
Ich hab garnicht mitbekommen, dass du nochmal druntergepostet hast, und jetzt wo ich glaube, es zu haben, sehe ich, dass hier schon ein Mustercode steht 
Ist der Ansatz so richtig? (Mein Code hat leichte Variationen im Gegensatz zu deinem, und jetzt wollt ich fragen...)
Ist der Ansatz so richtig? (Mein Code hat leichte Variationen im Gegensatz zu deinem, und jetzt wollt ich fragen...)
Code: Alles auswählen
Global SSE41.b = 0
Global SSE42.b = 0
!TEST ecx, $80000
!JZ l_nosse42 ;wenn die CPU kein 4.1 kann, kann sie 4.2 auch nicht
!MOV [v_SSE41], 1
;
!TEST ecx, $10000
!JZ l_nosse42
!MOV [v_SSE42], 1
NOSSE42:
Debug "SSE4.1-fähig? "+Str(SSE41)
Debug "SSE4.2-fähig? "+Str(SSE42)Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Wie herausfinden, ob die CPU SSE5 kann?
Lustig, dein Code sagt mir, dass ich SSE3 habe, aber "cat /proc/cpuinfo" sagt mir das nicht.
Bedeutet das, dass SSE3 unter etwas anderem einzuordnen ist oder hab ich SSE3 wirklich nicht? Immerhin hab ich ja auch SSSE3.cat /proc/cpuinfo hat geschrieben:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida tpr_shadow vnmi flexpriority
Re: Wie herausfinden, ob die CPU SSE5 kann?
Was für ne CPU hast du denn?NicTheQuick hat geschrieben:Lustig, dein Code sagt mir, dass ich SSE3 habe, aber "cat /proc/cpuinfo" sagt mir das nicht.Bedeutet das, dass SSE3 unter etwas anderem einzuordnen ist oder hab ich SSE3 wirklich nicht? Immerhin hab ich ja auch SSSE3.cat /proc/cpuinfo hat geschrieben:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida tpr_shadow vnmi flexpriority
Wenn ich keinen Fehler gemacht habe, und ich konnte keinen finden, dann hast du SSE3. Wäre ziemlich ausergewöhnlich wenn deine CPU SSSE3 unterstützt aber kein SSE3, immerhin kam SSSE3 ja nach SSE3.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Re: Wie herausfinden, ob die CPU SSE5 kann?
Mok hat geschrieben: Ist der Ansatz so richtig? (Mein Code hat leichte Variationen im Gegensatz zu deinem, und jetzt wollt ich fragen...)Code: Alles auswählen
Global SSE41.b = 0 Global SSE42.b = 0 !TEST ecx, $80000 !JZ l_nosse42 ;wenn die CPU kein 4.1 kann, kann sie 4.2 auch nicht !MOV [v_SSE41], 1 ; !TEST ecx, $10000 !JZ l_nosse42 !MOV [v_SSE42], 1 NOSSE42: [/quote] Bei SSE4.2 hast du ne 0 vergessen, es ist $100000.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Wie herausfinden, ob die CPU SSE5 kann?
Hier die Infos:Thorium hat geschrieben:Was für ne CPU hast du denn?
Wenn ich keinen Fehler gemacht habe, und ich konnte keinen finden, dann hast du SSE3. Wäre ziemlich ausergewöhnlich wenn deine CPU SSSE3 unterstützt aber kein SSE3, immerhin kam SSSE3 ja nach SSE3.
Also ich glaube schon, dass dein Code richtig ist und mir die Infos wohl nicht ganz richtig angezeigt werden.vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
stepping : 10
cpu MHz : 800.000
cache size : 4096 KB
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida tpr_shadow vnmi flexpriority
bogomips : 3990.06
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual