Wie komme ich am besten an Hardware-Infos?
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Wie komme ich am besten an Hardware-Infos?
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.
Das ist auch im OPM verfügbar.
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Re: Wie komme ich am besten an Hardware-Infos?
Sehr gut.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.
Und wie macht es das auf Linux? Mal kurz in die Quellen schauen...
Code: Alles auswählen
ReadFileContents('/proc/cpuinfo', LProcCpuInfos);
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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?
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).
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- 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?
Ja, in das jeweilig passende Unterforum von Programmierung.af0815 hat geschrieben: Do 15. Dez 2022, 10:38 Egal wie man es nennt, wo sollen solche Plattformunabhängigen API Fragen rein![]()
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- photor
- Beiträge: 512
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
- CPU-Target: 64Bit
Re: Wie komme ich am besten an Hardware-Infos?
JA, genau. Nicht streiten; kein Krieg, bitte! Ich suche nur Input!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.

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.
Re: Wie komme ich am besten an Hardware-Infos?
Ja, gibt es wie sstvmaster gezeigt hat.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.
Das tut aber am Ende auf Linux dasselbe, nämlich /proc/cpuinfo auswerten.
- 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?
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:
Winni
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;
...
- photor
- Beiträge: 512
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
- CPU-Target: 64Bit
Re: Wie komme ich am besten an Hardware-Infos?
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
Aber als Grundlage für weitere Versuche mag das reichen.
Ciao,
Photor
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:
Ciao,
Photor
- 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?
Hi!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.
Jo - Linux macht keinen Unterschied zwischen "echten" Cores und Hyperthreads.
Ist bei mir mit einem AMD Ryzen mit 4/8 Cores das Gleiche.
Winni
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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?
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).
- 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?
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
- photor
- Beiträge: 512
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
- CPU-Target: 64Bit
Re: Wie komme ich am besten an Hardware-Infos?
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.Winni hat geschrieben: Do 15. Dez 2022, 16:21Hi!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.
Jo - Linux macht keinen Unterschied zwischen "echten" Cores und Hyperthreads.
Ist bei mir mit einem AMD Ryzen mit 4/8 Cores das Gleiche.
Winni
Ciao,
Photor
- 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?
Hi!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
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
-
- Beiträge: 954
- 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?
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.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.

Gibt es von Intel doch schon.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.

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