Wie komme ich am besten an Hardware-Infos?

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

Wie komme ich am besten an Hardware-Infos?

Beitrag von photor »

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

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
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 »

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).

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!

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

Code: Alles auswählen

...
    uses UTF8Process;
...
   var
      cores: integer;
    begin
      cores := GetSystemThreadCount
...;
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

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

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

Beitrag von theo »

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;

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 »


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 »

theo hat geschrieben:
Mi 14. Dez 2022, 20:02
Unter Linux steht doch alles irgendwie in Files. Z.B. so:
Hi

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

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
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 »

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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

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

Beitrag von theo »

Winni hat geschrieben:
Mi 14. Dez 2022, 20:22
theo 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.
Dieses Forum heisst "API & Plattformspezifisches -> Linux" und "/sys/cpuinfo" habe ich noch nie gesehen.

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 »

theo hat geschrieben:
Mi 14. Dez 2022, 23:09
Dieses Forum heisst "API & Plattformspezifisches -> Linux" und "/sys/cpuinfo" habe ich noch nie gesehen.
Hi!

*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

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

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

Beitrag von theo »

Winni hat geschrieben:
Do 15. Dez 2022, 00:00
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.
Hast du irgendwelche Quellen dafür oder verbreitest du wieder mal nur FUD? :wink:

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
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 »

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).

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

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

Beitrag von theo »

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.
Gerne noch einmal.
Dieses Unterforum heisst: "API & Plattformspezifisches -> Linux" und darauf bezieht sich meine Antwort.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
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 »

theo hat geschrieben:
Do 15. Dez 2022, 08:20
Gerne noch einmal.
Dieses Unterforum heisst: "API & Plattformspezifisches -> Linux" und darauf bezieht sich meine Antwort.
Dann fehlt ein Unterforum "API & Plattformspezifisches -> Multiplattform".
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: 2641
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, 08:42
Dann fehlt ein Unterforum "API & Plattformspezifisches -> Multiplattform".
Ist Plattformspezifisch und Multiplattform nicht irgendwie ein Widerspruch?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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 »

theo hat geschrieben:
Do 15. Dez 2022, 00:11

Hast du irgendwelche Quellen dafür oder verbreitest du wieder mal nur FUD? :wink:
Hi!

/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

Antworten