Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   welchen Kern nutzt ein Prozess? (https://www.delphipraxis.net/188509-welchen-kern-nutzt-ein-prozess.html)

Monday 10. Mär 2016 20:32

welchen Kern nutzt ein Prozess?
 
Hallo,

gibt es eine einfache Methode herauszufinden, wieviel Kerne ein Prozess (nicht Thread) nutzt? (Evtl. auch welche?) Nach welchen Befehl muss ich suchen?

LG
Monday

Dalai 10. Mär 2016 20:47

AW: welchen Kern nutzt ein Prozess?
 
MSDN-Library durchsuchenGetProcessAffinityMask

Standardmäßig sind es alle Kerne. Ausnahme: Der Elternprozess läuft nicht auf allen Kernen, denn die Affinity wird vererbt auf Kindprozesse.

MfG Dalai

Luckie 10. Mär 2016 22:52

AW: welchen Kern nutzt ein Prozess?
 
Aus reiner Neugier. Wozu muss man das wissen?

Delphi-Laie 10. Mär 2016 23:24

AW: welchen Kern nutzt ein Prozess?
 
http://www.delphipraxis.net/134360-p...-und-mehr.html

Verlinktes Programm kann das nicht nur bei Prozessen, sondern auch bei einzelnen Threads, und das sowohl lesend als auch schreibend.

BUG 10. Mär 2016 23:42

AW: welchen Kern nutzt ein Prozess?
 
Zitat:

Zitat von Monday (Beitrag 1332617)
gibt es eine einfache Methode herauszufinden, wieviel Kerne ein Prozess (nicht Thread) nutzt?

Das kommt ganz darauf an, was du damit meinst:
  • kann potentiell benutzen: Affinitätsmaske
  • läuft real auf welchen Kernen (kriegt man bestimmt auch raus)
  • wie viele Kerne kann das Programm sinnvoll nutzen (wird schwer, Benchmarks)
  • ...

Welche Frage willst du mit der Info denn beantworten?

Monday 11. Mär 2016 14:20

AW: welchen Kern nutzt ein Prozess?
 
Vielen Dank für die Hilfe.

GetProcessAffinityMask habe ich mir angesehen und ausprobiert. Ich erhalte dort aber eine mehrstellige Zahl, mit der ich nichts anzufangen weiß. Scheint mir doch komplizierter zu sein.

Delphi-Quellcode:
  GetProcessAffinityMask(GetProcessHandleFromID(GetProcessID('notepad.exe')), procaffmask, sysaffmask);
  Memo1.Lines.Add(IntToStr(procaffmask));

Wozu Wissen:
In erster Linie so eine Prozessanzeige Übersicht.

Und zum anderen habe ich verschiedene Berechnungsprogramme (nicht von mir), die unterschiedlich schnell rechnen. Leider weiß ich nicht, ob sie nur einen oder mehrere Kerne nutzen. Für Vergleichszwecke fände ich es deshalb schön zu Wissen wer mehrkerne nutzt und wer nicht. Das habe ich vor geraumer Zeit schonmal versucht herauszufinden, bin aber dort auch schon gescheitert.

LG
Monday

bra 11. Mär 2016 14:41

AW: welchen Kern nutzt ein Prozess?
 
Zitat:

Zitat von Monday (Beitrag 1332670)
GetProcessAffinityMask habe ich mir angesehen und ausprobiert. Ich erhalte dort aber eine mehrstellige Zahl, mit der ich nichts anzufangen weiß. Scheint mir doch komplizierter zu sein.

Ist nicht ganz so kompliziert, wie es aussieht. Die Zahl ist eine binäre Entsprechung der verwendeten Kerne.

Bsp. Kern 1, 2 und 4 = binär 00001011 = dezimal 11

Hier hat einer eine übersichtliche Aufstellung gemacht (allerdings nur bis 8 Kerne):
http://forum.sturmovik.de/index.php?topic=982.0

Neutral General 11. Mär 2016 14:51

AW: welchen Kern nutzt ein Prozess?
 
Zitat:

Zitat von Monday (Beitrag 1332670)
GetProcessAffinityMask habe ich mir angesehen und ausprobiert. Ich erhalte dort aber eine mehrstellige Zahl, mit der ich nichts anzufangen weiß. Scheint mir doch komplizierter zu sein.

Wenn du Funktionen der Windows-API benutzt lohnt es sich die MSDN-Seite dazu zu lesen: GetProcessAffinityMask
Da steht dann meistens sehr genau was du übergeben musst, was du zurückbekommst und was du ansonsten so beachten musst.

jaenicke 11. Mär 2016 15:15

AW: welchen Kern nutzt ein Prozess?
 
Wenn du es für die anderen Tools einfach nur mal sehen möchtest, kannst du dafür den Process Explorer nehmen. Der zeigt soweit ich mich erinnere pro Prozess die Auslastung pro Kern an.

Und hier solltest du im Quelltext finden wie man so etwas ausliest:
http://processhacker.sourceforge.net/

himitsu 11. Mär 2016 15:28

AW: welchen Kern nutzt ein Prozess?
 
Zitat:

läuft real auf welchen Kernen (kriegt man bestimmt auch raus)
Oder auch nicht.
Ein-Kern-CPU: Dein Programm guckt, damm läuft aktuell kein anderer Prozess auf irgendeinem Kern ... du bist da ja schon.
Auch bei einer Mehr-Kern-CPU muß ein Programm "gerade" garnicht laufen ... bei tausenden Threads im System auch relativ wahrscheinlich, daß grade wer anderes auf den Kernen werkelt.

Der Sheduler kann prinzipiell alle x-Millisekunden jeden Thread auf einen andereren Kern schieben.
Oder anders gesagt, ein Programm läuft nicht auf einem Kern, sondern jeweils auf irgendeinem, den der Sheduler grade für "besser" hält und das kann sich schnell ändern.

Über Affinitätsmaske kann man aber die Kerne einschränken, auf denen ein Prozess laufen darf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz