Was unterstützt mein Prozessor?

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Was unterstützt mein Prozessor?

Beitrag von Helle »

Hier ein kleines Programm zur Ermittlung der CPU-Eigenschaften:

Code: Alles auswählen

;- Ermittlung einiger Prozessor-Eigenschaften, "Helle" Klaus Helbing, 21.06.2007, PB4.02

Global mmx.c    = 151        ;erstmal auf "-" setzen für nicht vorhanden
Global dnow.c   = 151
Global ednow.c  = 151
Global cmov.c   = 151
Global sse.c    = 151
Global sse2.c   = 151
Global sse3.c   = 151
Global ssse3.c  = 151
Global sse41.c  = 151
Global sse42.c  = 151
Global popcnt.c = 151

Global Bit0.l   = $1          ;für SSE3
Global Bit9.l   = $200        ;für SSSE3
Global Bit15.l  = $8000       ;für CMOVcc
Global Bit19.l  = $80000      ;für SSE4.1
Global Bit20.l  = $100000     ;für SSE4.2
Global Bit21.l  = $200000     ;für EFlag
Global Bit23.l  = $800000     ;für MMX und POPCNT
Global Bit25.l  = $2000000    ;für SSE
Global Bit26.l  = $4000000    ;für SSE2
Global Bit30.l  = $40000000   ;für extended 3DNow!
Global Bit31.l  = $80000000   ;für 3DNow!

Global Name$    = "Der getestete Prozessor unterstützt :"
Global MMX$     = "MMX :            "
Global DNOW$    = "3DNow! :       "
Global EDNOW$   = "ext3DNow! :  "
Global CMOV$    = "CMOVcc :      "
Global SSE$     = "SSE :             "
Global SSE2$    = "SSE2 :           "
Global SSE3$    = "SSE3 :           "
Global SSSE3$   = "SSSE3 :         "
Global SSE41$   = "SSE4.1 :        "
Global SSE42$   = "SSE4.2 :        "
Global POPCNT$  = "POPCNT :      "

;-------- Test, ob der CPUID-Befehl überhaupt vom Prozessor verarbeitet werden kann
;-------- ist möglich, wenn Bit21 des EFlag-Registers verändert werden kann
    !pushfd                  ;das EFlag-Register (32-Bit) auf den Stack
    !pop eax                 ;rein in EAX
    !mov edx,eax             ;EAX unverändert lassen
    !xor edx,[v_Bit21]       ;Bit21 kippen 
    !push edx                          
    !popfd                   ;in EFlag schreiben
    !pushfd                  ;wieder auf Stack
    !pop edx
    !push eax                ;der Ordnung halber alten Wert wieder herstellen
    !popfd   
    !cmp eax,edx
    !jne l_iscpuid           ;sind nicht gleich -> CPUID ist möglich

 MessageRequester("Status", "Der getestete Prozessor unterstützt den CPUID-Befehl nicht und somit weder MMX oder SSE !")
End  

IsCPUID:
;------------------------------------------------------------------------------

;-------- Test auf MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 und POPCNT
;-------- vorhanden, wenn im Rückgaberegister EDX bzw. ECX die entsprechenden Bits gesetzt sind
    !mov eax,1h
    !cpuid
    !test edx,[v_Bit23]      ;MMX
    !jz l_nommx
    !mov [v_mmx],2bh         ;"+" für vorhanden 
NOMMX:
    !test edx,[v_Bit25]      ;SSE  
    !jz l_nosse
    !mov [v_sse],2bh
NOSSE:
    !test edx,[v_Bit26]      ;SSE2  
    !jz l_nosse2
    !mov [v_sse2],2bh
NOSSE2:
    !test ecx,[v_Bit0]       ;SSE3
    !jz l_nosse3
    !mov [v_sse3],2bh    
NOSSE3:
    !test ecx,[v_Bit9]       ;SSSE3
    !jz l_nossse3
    !mov [v_ssse3],2bh 
NOSSSE3:
    !test ecx,[v_Bit19]      ;SSE4.1
    !jz l_nosse41
    !mov [v_sse41],2bh
NOSSE41:
    !test ecx,[v_Bit20]      ;SSE4.2
    !jz l_nosse42
    !mov [v_sse42],2bh
NOSSE42:
    !test ecx,[v_Bit23]      ;POPCNT
    !jz l_nopopcnt
    !mov [v_popcnt],2bh
NOPOPCNT:
 ;-------- Test auf CMOVcc (bedingtes Kopieren)
    !test edx,[v_Bit15]    
    !jz l_nocmov
    !mov [v_cmov],2bh
NOCMOV:       
;------------------------------------------------------------------------------    

;-------- Anzahl der vorhandenen extended levels ermitteln als Vorstufe für 3DNow!-Test
;-------- Rückgabewert in EAX (-80000000h) gibt Anzahl der extended level an
    !mov eax,80000000h
    !cpuid
    !cmp eax,80000000h       ;hat nichts mit einem Bit zu tun!
    !jbe l_noext             ;keine extended levels, 3DNow! überspringen
;------------------------------------------------------------------------------
    
;-------- Test auf 3DNow! und extended 3DNow! (auch DSP=Digital Signal Processing genannt)
;-------- vorhanden, wenn im Rückgaberegister EDX das Bit31 bzw. Bit30 gesetzt ist
;-------- ext.3DNow! (DSP) sind 5 Befehle: PF2IW, PFNACC, PFPNACC, PI2FW und PSWAPD
;-------- 3DNow! steht nur auf AMD-Prozessoren ab dem K6-2 zur Verfügung 
    !mov eax,80000001h       ;80000001h ist praktisch das erste extended level, dieser wird von Intel-Prozessoren nicht unterstützt!
    !cpuid                   ;Intel-Prozessoren liefern hier EAX=0 zurück
    !or eax,eax
    !je l_noext              ;ist Intel-Prozessor
    !test edx,[v_Bit31]      ;3DNow! 
    !jz l_noext
    !mov [v_dnow],2bh
    !test edx,[v_Bit30]      ;extended 3DNow!  
    !jz l_noext
    !mov [v_ednow],2bh
NOEXT:    
;------------------------------------------------------------------------------
   
 MessageRequester(Name$,MMX$+Chr(mmx)+Chr(10)+DNOW$+Chr(dnow)+Chr(10)+EDNOW$+Chr(ednow)+Chr(10)+CMOV$+Chr(cmov)+Chr(10)+SSE$+Chr(sse)+Chr(10)+SSE2$+Chr(sse2) + Chr(10)+SSE3$+Chr(sse3)+Chr(10)+SSSE3$+Chr(ssse3)+Chr(10)+SSE41$+Chr(sse41)+Chr(10)+SSE42$+Chr(sse42)+Chr(10)+POPCNT$+Chr(popcnt))
End        
Gruss
Helle

Edit 22.10.2006: CMOVcc neu, damit für Intel auch richtige Anzeige
Edit 10.01.2007: SSE3 neu, "alte" Verfahrensweise ergibt auf aktuellen CPU´s falsche Ergebnisse
Edit 24.06.2007: SSE4 hinzugefügt
Zuletzt geändert von Helle am 24.06.2007 20:47, insgesamt 3-mal geändert.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Bei mir unterstützt fast alles außer SSSE3 :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag von Proton »

Danke Helle ! Das ist bestimmt sehr gut zu gebrauchen. :allright:
Zitat:
"Ich kann mich vor die Meute stellen und für Nichts kämpfen. Ich kann aber auch einen Schritt zur Seite gehen, die Meute vorbeiziehen lassen und dabei meine Zeit angenehm bei Freunden verbringen.". Da hat er Recht, mein Pap's.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Von SSE hab ich gar nichts, aber die ersten vier. Ist das sehr schlecht?
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

SSE is Intel - 3Dnow! is AMD
Is also nich schlecht ;)

Btw. ich glaub so ein Code gabs schonmal - sogar bisl ausführlicher..
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Eher merkwürdig als schlecht. Hast du da ein sehr alten AMD? Eigentlich unterstützen doch schon die kleinen Athlons auch mindestens SSE und SSE2 oder?

Ist aber alles nicht so wichtig, so viel software gibt es eh nicht, die den ganzen spezialkram unterstützt, denn das ist meistens deutlich schwieriger zu programmieren.
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag von Helle »

Habe den Code bezüglich CMOVcc für Intel korrigiert (böse Falle!).
SSE (1) kam mit dem Pentium 3 bzw. Athlon 4 (kompletter Befehlssatz).

Gruss
Helle
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

also ich hab nen amd drinne und bei mir stand bei allem Plus, bis auf das letzte ... öhm SSSE3

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
RaVeN99
Beiträge: 310
Registriert: 29.08.2004 15:26
Wohnort: Weiden i.d.OPF
Kontaktdaten:

Beitrag von RaVeN99 »

@Zaphod:
Nix merkwürdig - die Thunderbirds hatten nunmal noch keine SSE erweiterungen, hier kam das Enhanced 3DNow! auf. Die Simd Streaming Extensions wurden irgendwann zu den zeiten des Athlon XP eingeführt.
Sogar die DDR RAM unterstützung fehlt ihm bei seinem Modell, da die erst ab dem C - Athlon, sprich mit dem 1.4er Prozessor eingeführt wurde.

Dass es nicht so wichtig ist entspricht leider auch nimmer ganz der wahrheit, da spiele mittlerweilen oft auf diese erweiterungen optimiert werden, das kommt oft bei diversen entwickler interviews heraus. Heftiger machen sich die optimierungen allerdings bei Appz bemerkbar, hier sind auch die unterschiedlich guten implementierungen gut erkennbar, da SSE auf Intel prozessoren deutlich stärker ist als auf AMD Maschinen...
Ausserdem gibt es doch compiler die die codes direkt auf solche Erweiterungen hin optimieren, oder täusche ich mich hier? Vllt. mag diese unterstützung bzw. optimierung nicht ganz so gu sein wie eine von hand, aber immerhin besser als wenns garnicht vorhanden wäre ;)


@Helle:
Klasse Code - lässt sich sicher mal verwenden =)
Hach wär des schön wenn jemand ne userlib o.ä. zusammenstöpseln würde mit wenigstens MMX nutzenden befehlen *träum* ;)
Das wär grade bei grafischen spielereien (also auch für die demo freaks unter uns) echt genial ^^


Mfg
RaVeN
AMD Athlon64 3000+, 1024MB DDR-RAM, Geforce 8600GT, WinXP SP2, DirectX 9.0c, PureBasic 3.94
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Was unterstützt mein Prozessor?

Beitrag von Thorium »

Du könntest noch das kommende AVX hinzufügen. Es ist Bit 28 von ECX.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten