FFT-Calculator, AVX2-und AVX-Version
Re: FFT-Calculator, AVX2-und AVX-Version
Davon habe ich mehrere am laufen !
Eben getestet, Durchschnittswerte für M50:
- Intel i7 7700K @5.0GHz: AVX=44.5s, AVX2=43.6s
- AMD Ryzen 7 1800X @3.7GHz: AVX=76.3s, AVX2=77.0s
Man sieht (wieder) den AMD-Nachteil bei 256-Bit-Register-Anwendungen.
Eben getestet, Durchschnittswerte für M50:
- Intel i7 7700K @5.0GHz: AVX=44.5s, AVX2=43.6s
- AMD Ryzen 7 1800X @3.7GHz: AVX=76.3s, AVX2=77.0s
Man sieht (wieder) den AMD-Nachteil bei 256-Bit-Register-Anwendungen.
Re: FFT-Calculator, AVX2-und AVX-Version
Mersenne M50Getestet unter Linux und der CPU "Intel Core i7-6700K @ 8x 4.2GHz".
Beim Code bitte #MB_ICONERROR durch #PB_MessageRequester_Error unddurchersetzen. Dann funktioniert es auch unter Linux.
Code: Alles auswählen
AVX-Version: 70431ms
AVX2-Version: 69034ms
Beim Code bitte #MB_ICONERROR durch #PB_MessageRequester_Error und
Code: Alles auswählen
FontHigh = Int(9.0 / (GetDeviceCaps_(GetDC_(WindowID(0)), #LOGPIXELSY) / 96.0)) ;muss für anderes OS (hier Windows 64Bit) neu!
;LoadFont(0, "Arial", FontHigh)
LoadFont(0, "Trebuchet MS Fett", FontHigh) ;in Windows 7 verfügbar; evtl.testen
Code: Alles auswählen
;FontHigh = Int(9.0 / (GetDeviceCaps_(GetDC_(WindowID(0)), #LOGPIXELSY) / 96.0)) ;muss für anderes OS (hier Windows 64Bit) neu!
LoadFont(0, "Arial", 12)
;LoadFont(0, "Trebuchet MS Fett", FontHigh) ;in Windows 7 verfügbar; evtl.testen
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: FFT-Calculator, AVX2-und AVX-Version
STRG+F oder ein Makro oder/und PureBasic eigene Konstanten (Der nicht Windowsnutzer würde sich freuen )
Anbei:
Ich habe mal den RAM beobachtet.
Das ganze benötigt gewaltig viel Speicher.
1. Programm nicht gestartet: RAM: 1,6 GB
2. Programm gestartet (M50): Ram steigt bis auf 6,72 GB
3. Nach der Berechnung behält sich das System 5,32 GB.
4. Nach Beendigung des Programms sinkt der RAM-Verbrauch wieder auf 1,68 GB
Beobachtung CPU: (Ich habe eine 4 Kern-Intel-CPU)
Vor der Berechnung: 3-7% Auslastung
Bei der Berechnung: Steigt auf ca. 30-40 % Gesamt - bleibt dann aber konstant bei um die 30% Auslastung, dabei wird immer im Wechsel ein Kern zu 100% ausgelastet.
Soviel zu meiner Beobachtung.
Anbei:
Ich habe mal den RAM beobachtet.
Das ganze benötigt gewaltig viel Speicher.
1. Programm nicht gestartet: RAM: 1,6 GB
2. Programm gestartet (M50): Ram steigt bis auf 6,72 GB
3. Nach der Berechnung behält sich das System 5,32 GB.
4. Nach Beendigung des Programms sinkt der RAM-Verbrauch wieder auf 1,68 GB
Beobachtung CPU: (Ich habe eine 4 Kern-Intel-CPU)
Vor der Berechnung: 3-7% Auslastung
Bei der Berechnung: Steigt auf ca. 30-40 % Gesamt - bleibt dann aber konstant bei um die 30% Auslastung, dabei wird immer im Wechsel ein Kern zu 100% ausgelastet.
Soviel zu meiner Beobachtung.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- 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:
Re: FFT-Calculator, AVX2-und AVX-Version
@Helle:
Die Abfrage des OS lieber mit Compiler-Direktiven gestalten. Denn so, wie es momentan ist, bekommt man unter Linux noch immer einer Fehlermeldung ("GetDeviceCaps_() is not a function..."):
also anstelle von:
besser das hier:
Grüße ... Peter
Die Abfrage des OS lieber mit Compiler-Direktiven gestalten. Denn so, wie es momentan ist, bekommt man unter Linux noch immer einer Fehlermeldung ("GetDeviceCaps_() is not a function..."):
also anstelle von:
Code: Alles auswählen
If OSVersion() > #PB_OS_Windows_XP And OSVersion() < #PB_OS_Linux_2_2 ;Linux fängt bei 1000 an
;Windows
FontHigh = Int(9.0 / (GetDeviceCaps_(GetDC_(WindowID(0)), #LOGPIXELSY) / 96.0)) ;GetDeviceCaps kann bei der Bildschirmanpassung nützlich sein
;LoadFont(0, "Arial", FontHigh)
LoadFont(0, "Trebuchet MS Fett", FontHigh) ;in Windows 7 verfügbar; evtl.testen
ElseIf OSVersion() >= #PB_OS_Linux_2_2 And OSVersion() < #PB_OS_MacOSX_10_0 ;MacOSX fängt bei 10000 an
;Linux
LoadFont(0, "Arial", 12) ;das hat Sicro zu verantworten :-). Unter Windows ist (bei mir) 12 zu groß
EndIf ;Mac?
Code: Alles auswählen
Define FontHigh
Define FontName.s
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
FontHigh = Int(9.0 / (GetDeviceCaps_(GetDC_(WindowID(0)), #LOGPIXELSY) / 96.0)) ; GetDeviceCaps kann bei der Bildschirmanpassung nützlich sein
FontName = "Trebuchet MS Fett" ; in Windows 7 verfügbar; evtl.testen
CompilerCase #PB_OS_Linux
FontHigh = 12
FontName = "Arial"
CompilerCase #PB_OS_MacOS
FontHigh = 12 ; ?
FontName = "Arial" ; ?
CompilerEndSelect
LoadFont(0, FontName, FontHigh)
Hygge
Re: FFT-Calculator, AVX2-und AVX-Version
Liebe Linux-Jünger,
ich habe aus obigen Codes die zarten Kompatibilitäts-Annäherungen an Linux wieder entfernt. Beim Test mit der brandneuen PB-Version 5.46 LTS fiel mir wieder ein, weshalb ich z.B. die Konstante #PB_MessageRequester_Error nicht verwendet habe: Sie wird von den LTS-Versionen (Windows) schlicht nicht unterstützt. Ich selbst benutze aber LTS häufig (Unicode-Thema!), so das dies für mich Priorität hat. Linux (und Mac) kann ich eh selbst nicht testen.
Man könnte jetzt das Icon (ist ja nicht unbedingt nötig) entfernen, aber wo anfangen und wo aufhören?
Ihr seid doch prima selbst in der Lage, den Code für Linux lauffähig zu machen.
Mit Kernel-Gruß
Helle
ich habe aus obigen Codes die zarten Kompatibilitäts-Annäherungen an Linux wieder entfernt. Beim Test mit der brandneuen PB-Version 5.46 LTS fiel mir wieder ein, weshalb ich z.B. die Konstante #PB_MessageRequester_Error nicht verwendet habe: Sie wird von den LTS-Versionen (Windows) schlicht nicht unterstützt. Ich selbst benutze aber LTS häufig (Unicode-Thema!), so das dies für mich Priorität hat. Linux (und Mac) kann ich eh selbst nicht testen.
Man könnte jetzt das Icon (ist ja nicht unbedingt nötig) entfernen, aber wo anfangen und wo aufhören?
Ihr seid doch prima selbst in der Lage, den Code für Linux lauffähig zu machen.
Mit Kernel-Gruß
Helle
Re: FFT-Calculator, AVX2-und AVX-Version
ok, ich finde es halt nur schade, dass die beiden "Inkompatibilitäten" in Deinem Code eigentlich gar nicht sein müssten.Helle hat geschrieben:Liebe Linux-Jünger, [...]
Aber kein Thema. War halt nur ein Hinweis. Ist ja Dein Code. Kannst damit machen, was Du willst.
Grüße ... Peter
Hygge
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- 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:
Re: FFT-Calculator, AVX2-und AVX-Version
Da haut er die verrücktesten Assembler-Codes raus, aber ist zu faul für ein kleines CompilerIf.
Re: FFT-Calculator, AVX2-und AVX-Version
Nic, Du weißt doch: Programmierer sind von Haus aus faule Hunde und Hobby-Programmierer (wie meiner einer) sind da keinen Deut besser !
@ccode_new: Ja, der Speicherbedarf ist bei der Butterfly-Methode enorm. Jede Faktoren-Dezimal-Ziffer (Byte) wird als DWord in Double konvertiert, dann 2x abgespeichert, wobei noch der Platz für den Imaginärteil reserviert wird, für jedes N ist Cos und Sin als Double zu berechnen und abzuspeichern...
N ist die nächsthöhere 2-er Potenz der Faktoren-Länge, beide Faktoren müssen auf gleiche Länge getrimmt werden... Das läppert sich zusammen !
Habe oben die Prozedur Calc() auf Speicher-Optimierung getrimmt, aber das macht den Kohl nicht fett.
Gruß
Helle
@ccode_new: Ja, der Speicherbedarf ist bei der Butterfly-Methode enorm. Jede Faktoren-Dezimal-Ziffer (Byte) wird als DWord in Double konvertiert, dann 2x abgespeichert, wobei noch der Platz für den Imaginärteil reserviert wird, für jedes N ist Cos und Sin als Double zu berechnen und abzuspeichern...
N ist die nächsthöhere 2-er Potenz der Faktoren-Länge, beide Faktoren müssen auf gleiche Länge getrimmt werden... Das läppert sich zusammen !
Habe oben die Prozedur Calc() auf Speicher-Optimierung getrimmt, aber das macht den Kohl nicht fett.
Gruß
Helle