Wie komme ich am besten an Hardware-Infos?
- 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
Wie komme ich am besten an Hardware-Infos?
Hallo Forum,
ich frage hier (Portal -> Foren-Übersicht -> API & Plattformspezifisches -> Linux), weil es mir zunächst um ein Lazarus-Programm unter Linux geht; später soll das aber auch auf andere Plattformen (Windows; auch Delphi) übertragen werden - das für den Hinterkopf.
Ich experimentiere immer noch mit Threads und dem parallelen Ausführen von numerischen Berechnungen herum. Dazu werden mehrere - eventuell viele gleichartige - Threads mit unterschiedlichen Parametern gestartet - funktioniert teilweise und teilweise noch nicht, so wie ich will). Dazu wäre es gut zu wissen, wieviele Threads man sinnvollerweise parallel starten kann/soll.
Also anders ausgedrückt: wieviele Kerne hat meine Hardware (mehr gleichzeitig loszutreten scheint mir nicht sinnvoll; die würden sich eher stören)? Gibt es eine Möglichkeit (idealerweise eine Library oder Unit oder bereits implementierte Funktionen, bereits gesetzte Datenstrukturen), diese Info aus dem Programm heraus abzufragen?
Für jeden Hinweis dankbar,
Photor
ich frage hier (Portal -> Foren-Übersicht -> API & Plattformspezifisches -> Linux), weil es mir zunächst um ein Lazarus-Programm unter Linux geht; später soll das aber auch auf andere Plattformen (Windows; auch Delphi) übertragen werden - das für den Hinterkopf.
Ich experimentiere immer noch mit Threads und dem parallelen Ausführen von numerischen Berechnungen herum. Dazu werden mehrere - eventuell viele gleichartige - Threads mit unterschiedlichen Parametern gestartet - funktioniert teilweise und teilweise noch nicht, so wie ich will). Dazu wäre es gut zu wissen, wieviele Threads man sinnvollerweise parallel starten kann/soll.
Also anders ausgedrückt: wieviele Kerne hat meine Hardware (mehr gleichzeitig loszutreten scheint mir nicht sinnvoll; die würden sich eher stören)? Gibt es eine Möglichkeit (idealerweise eine Library oder Unit oder bereits implementierte Funktionen, bereits gesetzte Datenstrukturen), diese Info aus dem Programm heraus abzufragen?
Für jeden Hinweis dankbar,
Photor
- 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?
Ich glaube so Funktionen in PascalSCADA gesehen zu haben und zwar im Modul was die Threadwechsel durchführt und das Plattformübergreifend. Mal sehen ob das finde.
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?
Hi!
Die Anzahl Deiner Cores erhälst Du in Linux/Mac/Win so:
Wenn Deine Threads etwa die gleiche Länge haben, dann gilt genau: so viele Threads starten, wie die Hardware besitzt.
Ich hab damit vor längerer Zeit mit rumgespielt (Projektion von Geo-Daten in die verschiedenen Karten-Modelle). Wenn man mehr Threads als Hardware-Cores startet, verlangsamt insgesamt den Vorgang, weil zu viel Overhead verwaltet werden muss.
Da meine Threads aber von signifikant verschiedener Länge waren (Vatikan ist kleiner als Kanada), habe ich immer einen Thread mehr gestartet, als ich Cores hatte. Wenn ein Thread fertig war, bekam der "Überzählige" sofort einen ganzen Core ohne Zeitverzögerung.
Wenn man übersichtlichere Daten als die Länderumrisse der Welt hat, dann kann man ja selbst dafür sorgen, dass die Jobs etwa gleichlang sind.
Zum Beispiel Bildbearbeitung: Bei 8 Cores bekommen die jeweils die Bilder- Zeilen 0 bis 7, dann 8 bis 15 und so fort.
So viel erstmal
Winni
Die Anzahl Deiner Cores erhälst Du in Linux/Mac/Win so:
Code: Alles auswählen
...
uses UTF8Process;
...
var
cores: integer;
begin
cores := GetSystemThreadCount
...;
Ich hab damit vor längerer Zeit mit rumgespielt (Projektion von Geo-Daten in die verschiedenen Karten-Modelle). Wenn man mehr Threads als Hardware-Cores startet, verlangsamt insgesamt den Vorgang, weil zu viel Overhead verwaltet werden muss.
Da meine Threads aber von signifikant verschiedener Länge waren (Vatikan ist kleiner als Kanada), habe ich immer einen Thread mehr gestartet, als ich Cores hatte. Wenn ein Thread fertig war, bekam der "Überzählige" sofort einen ganzen Core ohne Zeitverzögerung.
Wenn man übersichtlichere Daten als die Länderumrisse der Welt hat, dann kann man ja selbst dafür sorgen, dass die Jobs etwa gleichlang sind.
Zum Beispiel Bildbearbeitung: Bei 8 Cores bekommen die jeweils die Bilder- Zeilen 0 bis 7, dann 8 bis 15 und so fort.
So viel erstmal
Winni
Re: Wie komme ich am besten an Hardware-Infos?
Unter Linux steht doch alles irgendwie in Files. Z.B. so:
Code: Alles auswählen
var Sl:TStringList;
i:integer;
begin
Sl:=TStringList.Create;
Sl.NameValueSeparator:=':';
SL.LoadFromFile('/proc/cpuinfo');
for i:=0 To SL.Count-1 do
if Trim(sl.Names[i])='cpu cores' then
begin
Showmessage(sl.ValueFromIndex[i]);
break;
end;
Sl.free;
end;
- 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?
Hitheo hat geschrieben: Mi 14. Dez 2022, 20:02 Unter Linux steht doch alles irgendwie in Files. Z.B. so:
Erstens ist das Linux-only und zweitens wandert immer mehr von /proc nach /sys.
Und das ist bei jeder Distro leider anders.
So sehr ich /proc liebe: Momentan mit vielen Unwägbarkeiten.
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?
Ich habe es in PascalScada gefunden. Ist im OPM drinnen.
pascalscada.multithreading.core_affinity_threads.pas dort class function TpSCADACoreAffinityThread.GetSystemThreadCount: cint32;
Ist für die Targets Win32, win64,WinCE,solaris,freebsd,darwin,linux. Ichhabe noch keine Plattform erlebt, wo das nicht funktioniert hat (mal Mobile weggelassen).
Es sind auch ein paar andere Sachen da drinnen, die für spezielle Threads interessant sind.
pascalscada.multithreading.core_affinity_threads.pas dort class function TpSCADACoreAffinityThread.GetSystemThreadCount: cint32;
Ist für die Targets Win32, win64,WinCE,solaris,freebsd,darwin,linux. Ichhabe noch keine Plattform erlebt, wo das nicht funktioniert hat (mal Mobile weggelassen).
Es sind auch ein paar andere Sachen da drinnen, die für spezielle Threads interessant sind.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Wie komme ich am besten an Hardware-Infos?
Dieses Forum heisst "API & Plattformspezifisches -> Linux" und "/sys/cpuinfo" habe ich noch nie gesehen.Winni hat geschrieben: Mi 14. Dez 2022, 20:22Erstens ist das Linux-only und zweitens wandert immer mehr von /proc nach /sys.theo hat geschrieben: Mi 14. Dez 2022, 20:02 Unter Linux steht doch alles irgendwie in Files. Z.B. so:
Und das ist bei jeder Distro leider anders.
So sehr ich /proc liebe: Momentan mit vielen Unwägbarkeiten.
- 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!theo hat geschrieben: Mi 14. Dez 2022, 23:09 Dieses Forum heisst "API & Plattformspezifisches -> Linux" und "/sys/cpuinfo" habe ich noch nie gesehen.
*Noch* nicht.
Die Festplatten, Power, Devices, Filesystem und vieles Anderes ist bereits unter /sys .
Ich rede von Suse
Eine Frage der Zeit, bis anderes umzieht. Timeline dafür hab ich allerdings nicht gefunden.
Winni
Re: Wie komme ich am besten an Hardware-Infos?
Hast du irgendwelche Quellen dafür oder verbreitest du wieder mal nur FUD?Winni hat geschrieben: Do 15. Dez 2022, 00:00*Noch* nicht.theo hat geschrieben: Mi 14. Dez 2022, 23:09 Dieses Forum heisst "API & Plattformspezifisches -> Linux" und "/sys/cpuinfo" habe ich noch nie gesehen.
Die Festplatten, Power, Devices, Filesystem und vieles Anderes ist bereits unter /sys .
Ich rede von Suse
Eine Frage der Zeit, bis anderes umzieht. Timeline dafür hab ich allerdings nicht gefunden.

- 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?
BTW: photor sucht eine Lösung die am besten Plattformunabhängig ist. Und /proc oder /sys ist nun mal halt nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Wie komme ich am besten an Hardware-Infos?
Gerne noch einmal.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.
Dieses Unterforum heisst: "API & Plattformspezifisches -> Linux" und darauf bezieht sich meine Antwort.
- 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?
Dann fehlt ein Unterforum "API & Plattformspezifisches -> Multiplattform".theo hat geschrieben: Do 15. Dez 2022, 08:20 Gerne noch einmal.
Dieses Unterforum heisst: "API & Plattformspezifisches -> Linux" und darauf bezieht sich meine Antwort.
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?
Ist Plattformspezifisch und Multiplattform nicht irgendwie ein Widerspruch?af0815 hat geschrieben: Do 15. Dez 2022, 08:42 Dann fehlt ein Unterforum "API & Plattformspezifisches -> Multiplattform".
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- 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!theo hat geschrieben: Do 15. Dez 2022, 00:11
Hast du irgendwelche Quellen dafür oder verbreitest du wieder mal nur FUD?![]()
/proc ist der "Wilde Westen" aus den frühen Linux-Tagen.
/sys hat den Ansatz das Ganze in eine strukturierte Form zu bringen. Allerdings ohne große Hektik bei den Kernelbauern. Die sind gerade damit beschäftigt, Rust als zweite Sprache in den Kernel zu integrieren.
Winni