![]() |
AVX2 Support auslesen?
Hallo,
ich habe mir eine Funktion aus dem Internet geholt die mir den Support für AVX ausliest.
Delphi-Quellcode:
Leider kann ich kein ASM und verstehe deshalb auch nicht was er da genau macht. Gibt es eine ähnliche Funktion wie diese für AVX2?
function TForm1.FisAvxSupported: Boolean;
asm {$IFDEF CPUX86} push ebx {$ENDIF} {$IFDEF CPUX64} mov r10, rbx {$ENDIF} xor eax, eax cpuid cmp eax, 1 jb @not_supported mov eax, 1 cpuid and ecx, 018000000h cmp ecx, 018000000h jne @not_supported xor ecx, ecx db 0Fh, 01h, 0D0h //XGETBV and eax, 110b cmp eax, 110b jne @not_supported mov eax, 1 jmp @done @not_supported: xor eax, eax @done: {$IFDEF CPUX86} pop ebx {$ENDIF} {$IFDEF CPUX64} mov rbx, r10 {$ENDIF} end; Freundliche Grüsse |
AW: AVX2 Support auslesen?
Der Befehl CPUID liest von der CPU die ID-Werte aus und schreibt sie in EAX bis EDX.
Und dann wird erst geprüft, ob bestimmte Werte/Bits ($018000000) in ECX gesetzt, wenn ja, dann wird auch noch der Befehl XGETBV ausgeführt und dessen ergebnis geprüft. ![]() ![]() ![]() |
AW: AVX2 Support auslesen?
Was willst Du denn damit erreichen? Da die neuen Mnemonics von dem Delphi asm nicht unterstützt werden, müsstest Du das ja binär codieren. Die Beschreibung welche Bits Du prüfen musst, findest Du bei
![]() |
AW: AVX2 Support auslesen?
Hallo,
ich weiß, der Thread ist alt. Bin gerade zufällig drüber gestolpert und hab' mir gedacht: 1. CPUID gibt's inzwischen auch in system.pas: System.GetCPUID 2. AVX/AVX2 Assembler Befehle werden in aktuellen Delphi Versionen vom eingebauten Assembler unterstützt. |
AW: AVX2 Support auslesen?
AVX wird seit Delphi 11.3 schon in System geprüft, denn Move benutzt es, seit ich es dort eingebaut habe 8-) Die Variable TestAVX ist dann 1.
Delphi-Quellcode:
CPUIDTable[1].ECX and (1 shl 28) <> 0
AVX2 prüft man laut der oben verlinkten Tabelle so:
Delphi-Quellcode:
CPUIDTable[7].EBX and (1 shl 5) <> 0
|
AW: AVX2 Support auslesen?
|
AW: AVX2 Support auslesen?
Nette Unit!
Man könnte vermutlich nun Teile davon durch den CPUID Support der RTL ersetzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz