Wie komme ich am besten an Hardware-Infos?

sstvmaster
Beiträge: 576
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von sstvmaster »

Um die Cores zu zählen/prüfen hat der User Xor-el aus dem englischen Forum hat dazu ein Package erstellt: https://github.com/Xor-el/NumCPULib4Pascal

Das ist auch im OPM verfügbar.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von theo »

sstvmaster hat geschrieben:
Do 15. Dez 2022, 09:45
Um die Cores zu zählen/prüfen hat der User Xor-el aus dem englischen Forum hat dazu ein Package erstellt: https://github.com/Xor-el/NumCPULib4Pascal

Das ist auch im OPM verfügbar.
Sehr gut.
Und wie macht es das auf Linux? Mal kurz in die Quellen schauen...

Code: Alles auswählen

 ReadFileContents('/proc/cpuinfo', LProcCpuInfos);

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von af0815 »

m.fuchs hat geschrieben:
Do 15. Dez 2022, 09:25
af0815 hat geschrieben:
Do 15. Dez 2022, 08:42
Dann fehlt ein Unterforum "API & Plattformspezifisches -> Multiplattform".
Ist Plattformspezifisch und Multiplattform nicht irgendwie ein Widerspruch?
API kann aber auch Multiplattform sein. die FCL oder LCL sind API's die über viele Plattformen gehen.

Egal wie man es nennt, wo sollen solche Plattformunabhängigen API Fragen rein :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von m.fuchs »

af0815 hat geschrieben:
Do 15. Dez 2022, 10:38
Egal wie man es nennt, wo sollen solche Plattformunabhängigen API Fragen rein :-)
Ja, in das jeweilig passende Unterforum von Programmierung.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
photor
Beiträge: 444
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von photor »

af0815 hat geschrieben:
Do 15. Dez 2022, 07:14
BTW: photor sucht eine Lösung die am besten Plattformunabhängig ist. Und /proc oder /sys ist nun mal halt nicht.
JA, genau. Nicht streiten; kein Krieg, bitte! Ich suche nur Input! :)

Zunächst suche ich was für Linux - mit dem Hinterkopfgedanken, dass das später auch für Win angewendet werden könnte.

An /proc hatte ich auch schon gedacht - aber das ist eben sehr Low-Level - zur Not geht das natürlich (mit der Einschränkung, dass man das später anpassen muss - ist bei Low-Level halt so). Aber genau deshalb ja die Frage, ob es was in Lazarus/Pascal selbst gibt - also eine Ebene drüber.

Die anderen Tipps schaue ich mir auch noch in Ruhe an.

Danke,
Photor


PS: Nach einem Multi-Platform-Forum hatte ich auch gesucht; ich hätte es auch in die Ebene drüber packen können. Hab jetzt erstmal für Linux gesucht/gefragt.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von theo »

photor hat geschrieben:
Do 15. Dez 2022, 11:21
An /proc hatte ich auch schon gedacht - aber das ist eben sehr Low-Level - zur Not geht das natürlich (mit der Einschränkung, dass man das später anpassen muss - ist bei Low-Level halt so). Aber genau deshalb ja die Frage, ob es was in Lazarus/Pascal selbst gibt - also eine Ebene drüber.
Ja, gibt es wie sstvmaster gezeigt hat.
Das tut aber am Ende auf Linux dasselbe, nämlich /proc/cpuinfo auswerten.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von Winni »

Hi!

Es sollte ja möglichst plattform-unabhängig sein.

Also noch einmal
Die Anzahl Deiner Cores erhälst Du in Linux/Mac/Win so:

Code: Alles auswählen

...
    uses UTF8Process;
...
   var
      cores: integer;
    begin
      cores := GetSystemThreadCount;
...
Winni

Benutzeravatar
photor
Beiträge: 444
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von photor »

Jup. Gesehen und eben auch probiert:

Funktioniert - prinzipiell!

Mein Programm meldet mir allerdings "8 cores", obwohl mein T440s doch nur 4 Cores bietet; Ich denke, da ist eventuell so was wie Hyperthreading im Spiel. Da muss ich nochmal schauen, was da genau los ist.

Hier mal der Output von cat /proc/cpuinfo

Code: Alles auswählen

photor@Picard ~> cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 69
model name	: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz
stepping	: 1
microcode	: 0x26
cpu MHz		: 900.054
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple shadow_vmcs
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 4990.43
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 69
model name	: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz
stepping	: 1
microcode	: 0x26
cpu MHz		: 1045.725
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 2
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple shadow_vmcs
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 4990.43
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 2
vendor_id	: GenuineIntel
cpu family	: 6
model		: 69
model name	: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz
stepping	: 1
microcode	: 0x26
cpu MHz		: 1005.006
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 1
cpu cores	: 2
apicid		: 2
initial apicid	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple shadow_vmcs
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 4990.43
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 3
vendor_id	: GenuineIntel
cpu family	: 6
model		: 69
model name	: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz
stepping	: 1
microcode	: 0x26
cpu MHz		: 909.260
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 1
cpu cores	: 2
apicid		: 3
initial apicid	: 3
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple shadow_vmcs
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 4990.43
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:
Aber als Grundlage für weitere Versuche mag das reichen.

Ciao,
Photor

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von Winni »

photor hat geschrieben:
Do 15. Dez 2022, 15:23


Mein Programm meldet mir allerdings "8 cores", obwohl mein T440s doch nur 4 Cores bietet; Ich denke, da ist eventuell so was wie Hyperthreading im Spiel. Da muss ich nochmal schauen, was da genau los ist.
Hi!

Jo - Linux macht keinen Unterschied zwischen "echten" Cores und Hyperthreads.

Ist bei mir mit einem AMD Ryzen mit 4/8 Cores das Gleiche.

Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von af0815 »

Es wird noch schwieriger werden, weil langsam wird in performance Core und efficency Core unterschieden werden, wenn das System beim angebissenen Obst Schule macht und auch Intel/AMD auf die Schiene aufspringen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von Winni »

af0815 hat geschrieben:
Do 15. Dez 2022, 17:46
Es wird noch schwieriger werden, weil langsam wird in performance Core und efficency Core unterschieden werden, wenn das System beim angebissenen Obst Schule macht und auch Intel/AMD auf die Schiene aufspringen.

Hi!

Für alle, die sich - wie ich - da erstmal schlau machen müssen:

https://www.makeuseof.com/intel-cpus-ex ... -p-cores/

Winni

Benutzeravatar
photor
Beiträge: 444
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von photor »

Winni hat geschrieben:
Do 15. Dez 2022, 16:21
photor hat geschrieben:
Do 15. Dez 2022, 15:23


Mein Programm meldet mir allerdings "8 cores", obwohl mein T440s doch nur 4 Cores bietet; Ich denke, da ist eventuell so was wie Hyperthreading im Spiel. Da muss ich nochmal schauen, was da genau los ist.
Hi!

Jo - Linux macht keinen Unterschied zwischen "echten" Cores und Hyperthreads.

Ist bei mir mit einem AMD Ryzen mit 4/8 Cores das Gleiche.

Winni
Wobei diese Hyper Threading ja nur dann sinnvoll ist, wenn so ein Thread immer mal ne Pause macht, so dass ein anderer diesen Core nutzen könnte. Das ist aber bei mir nicht der Fall. Und in dem Fall führt Hyper Threading sogar zu einer Verlangsamung des Ganzen: unter Windows/Delphi auf Büro-Rechner mit 24/48 Cores getestet - das ist selbst dann der Fall, wenn man die Rechnung auf 24 Cores beschränkt; der Verwaltungsoverhead schlägt trotzdem zu.

Ciao,
Photor

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von Winni »

photor hat geschrieben:
Do 15. Dez 2022, 19:23

Wobei diese Hyper Threading ja nur dann sinnvoll ist, wenn so ein Thread immer mal ne Pause macht, so dass ein anderer diesen Core nutzen könnte. Das ist aber bei mir nicht der Fall. Und in dem Fall führt Hyper Threading sogar zu einer Verlangsamung des Ganzen: unter Windows/Delphi auf Büro-Rechner mit 24/48 Cores getestet - das ist selbst dann der Fall, wenn man die Rechnung auf 24 Cores beschränkt; der Verwaltungsoverhead schlägt trotzdem zu.

Ciao,
Photor
Hi!

Cores nutzen typischerweise nicht einmal 50% der Ressourcen - unter Vollast. Deshalb ist Intel ja auf den Bolzen gekommen, das man 2 Cores mit nur einem Satz "shared ressources" ausstattet.

Den Overhead reduziert man am besten, indem man möglichst große Mengen Daten pro Thread berechnen läst. Das Starten von Threads und das waitfor fressen relativ große Menge an Zeit. Es muss also Ziel sein, dass die einzelnen Threads möglichst wenig gestartet werden.

Wieder mein Beispiel Bildbearbeitung: Nicht für jede Zeile einen Thread starten, sondern dem Thread mitteilen, wieviel Kollegen er hat und welche Nummer. Wenn er dann Thread 0 von 8 ist, kann er sich selbst ausrechnen, dass er die Zeilen 0,8,16,... bearbeiten muss.

Keep on hacking
Winni

PascalDragon
Beiträge: 830
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Wie komme ich am besten an Hardware-Infos?

Beitrag von PascalDragon »

photor hat geschrieben:
Do 15. Dez 2022, 15:23
Mein Programm meldet mir allerdings "8 cores", obwohl mein T440s doch nur 4 Cores bietet; Ich denke, da ist eventuell so was wie Hyperthreading im Spiel. Da muss ich nochmal schauen, was da genau los ist.
Das siehst du bei jedem phyischen Prozessor in der Ausgabe von /proc/cpuinfo in der Zeile cpu cores. Gibt zum Beispiel POWER8 oder POWER9 Systemen von IBM, die haben dann 8 Cores per Prozessor und dann noch 10 Prozessoren. :lol:
af0815 hat geschrieben:
Do 15. Dez 2022, 17:46
Es wird noch schwieriger werden, weil langsam wird in performance Core und efficency Core unterschieden werden, wenn das System beim angebissenen Obst Schule macht und auch Intel/AMD auf die Schiene aufspringen.
Gibt es von Intel doch schon. :mrgreen:

Und wenn man in den Threads viel im Speicher rumschaufelt, dann sollte man sich noch mit NUMA beschäftigen, da ein bestimmtes Set an Prozessoren eine kürzere Anbindung an bestimmten Speicher hat und eine längere an anderen Speicher (und andere Sets haben dann eine kürzere Anbindung an diesen). Das kann dann auch potenziell zu Performanceunterschieden führen...
FPC Compiler Entwickler

Antworten