Mehrere Threads vs. mehrere Kerne
-
- Beiträge: 8
- Registriert: 03.01.2017 18:28
Mehrere Threads vs. mehrere Kerne
Hallo,
selbst nach längerem Suchen bin ich mir nicht sicher, ob ich das Zusammenspiel von Threads und mehreren Kernen richtig verstehe.
Meine Überlegungen:
1. Mehrere Threads bedeuten nicht zwangsläufig, dass mehrere Prozessorkerne "beschäftigt" werden.
2. Die Fragen hier und im englischen Forum, die sich mit der fehlenden Beschleunigung bzw. sogar Verlangsamung bei der Nutzung mehrerer Threads beschäftigen lassen mich vermuten, dass mehrere Threads auf einem Prozessorkern laufen (wie zum Beispiel bei RealBasic/Xojo).
3. Wenn das zutrifft, wie kann ich einen neuen Prozessorkern "einführen"? Muss ich ein weiteres Programm bzw. eine neue Programminstanz starten?
Herzlichen Dank für jedwede Hilfe
Jens
selbst nach längerem Suchen bin ich mir nicht sicher, ob ich das Zusammenspiel von Threads und mehreren Kernen richtig verstehe.
Meine Überlegungen:
1. Mehrere Threads bedeuten nicht zwangsläufig, dass mehrere Prozessorkerne "beschäftigt" werden.
2. Die Fragen hier und im englischen Forum, die sich mit der fehlenden Beschleunigung bzw. sogar Verlangsamung bei der Nutzung mehrerer Threads beschäftigen lassen mich vermuten, dass mehrere Threads auf einem Prozessorkern laufen (wie zum Beispiel bei RealBasic/Xojo).
3. Wenn das zutrifft, wie kann ich einen neuen Prozessorkern "einführen"? Muss ich ein weiteres Programm bzw. eine neue Programminstanz starten?
Herzlichen Dank für jedwede Hilfe
Jens
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mehrere Threads vs. mehrere Kerne
Das ganze hängt davon ab, wieviele Kerne haste, wie sind die Ausgelastet usw. Darüber brauchste Dir aber keine Gedanken machen,
das Betriebssystem sorgt autom. für eine Auslastung, die gut für das System ist. Wichtig ist nur, das Du versch. Threads erstellst, damit
das OS da auch eingreifen kann.
Man kann da auch eingreifen, aber wohl niemals Sinnvoll
Gruß
Thomas
das Betriebssystem sorgt autom. für eine Auslastung, die gut für das System ist. Wichtig ist nur, das Du versch. Threads erstellst, damit
das OS da auch eingreifen kann.
Man kann da auch eingreifen, aber wohl niemals Sinnvoll
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Mehrere Threads vs. mehrere Kerne
Du kannst mit der WinAPI-Funktion SetThreadAffinityMask_() einzelne Threads pro Prozessorkern laufen lassen. Beispielcode:
Mit GetSystemInfo_() und SYSTEM_INFO\dwNumberOfProcessors kannst du ermitteln, wie viele Prozessorkerne vorhanden sind:
Code: Alles auswählen
EnableExplicit
Procedure Thread1(z)
Protected a
SetThreadAffinityMask_(GetCurrentThread_(), 1)
Repeat
a = Random($FFFFFFF)*Random($FFFFFFF)*Random($FFFFFFF)
ForEver
EndProcedure
Procedure Thread2(z)
Protected a
SetThreadAffinityMask_(GetCurrentThread_(), 2)
Repeat
a = Random($FFFFFFF)*Random($FFFFFFF)*Random($FFFFFFF)
ForEver
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateThread(@Thread1(), 0)
CreateThread(@Thread2(), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Code: Alles auswählen
EnableExplicit
Define SYSTEM_INFO.SYSTEM_INFO
GetSystemInfo_(SYSTEM_INFO)
Debug SYSTEM_INFO\dwNumberOfProcessors
Re: Mehrere Threads vs. mehrere Kerne
@RSBasic
Interessante Sache.
Auch sinnvoll?
Die Random Funktion führt auf meinem System zu einem Überlauf der Integer a......denke liegt daran das ich Windows 32bit benutze.
Grüße
Interessante Sache.
Auch sinnvoll?
Die Random Funktion führt auf meinem System zu einem Überlauf der Integer a......denke liegt daran das ich Windows 32bit benutze.
Grüße
Barcodes for PureBasic - http://micha122.bplaced.net/
Re: Mehrere Threads vs. mehrere Kerne
ts-soft hat grundsätzlich recht. Man sollte es lieber dem Betriebssystem überlassen. Manuelles Zuordnen ist nur in Spezialfällen sinnvoll, wenn die Performance dadurch verbessert wird.Micha122 hat geschrieben:Auch sinnvoll?
Achso, ich habe es nur unter x64 getestet. Den Beispielcode habe ich angepasst.Micha122 hat geschrieben:Die Random Funktion führt auf meinem System zu einem Überlauf der Integer a......denke liegt daran das ich Windows 32bit benutze.
Re: Mehrere Threads vs. mehrere Kerne
@RSBasic
Hab´s vorhin vergessen: Danke für den Code. Werde demnächst mal etwas damit experimentieren.
Nicht die Anzahl der tatsächlich vorhandenen Kerne(Hardware).
Hab´s vorhin vergessen: Danke für den Code. Werde demnächst mal etwas damit experimentieren.
Kann man nun sehen wie man möchte, aber eigentlich wird die Anzahl der Prozessor- Threads ausgegeben.Mit GetSystemInfo_() und SYSTEM_INFO\dwNumberOfProcessors kannst du ermitteln, wie viele Prozessorkerne vorhanden sind:
Nicht die Anzahl der tatsächlich vorhandenen Kerne(Hardware).
Barcodes for PureBasic - http://micha122.bplaced.net/
-
- Beiträge: 8
- Registriert: 03.01.2017 18:28
Re: Mehrere Threads vs. mehrere Kerne
Herzlichen Dank für die Informationen.
Wie schlau ist das Betriebssystem denn bei der Zuordnung eines Threads zu einem Prozessorkern? Dass ein neuer Thread nicht einem schon grenzwertig an 100%-Auslastungsgrenze entlangschrammendem Kern zugeordnet wird, kann ich mir gut vorstellen. Aber wird einem im Laufe der Zeit immer aufwändigerem Thread eventuell mal ein neuer Kern zugeordnet? Da vermute ich nein.
Infolgedessen könnte die händische Zuordnung durchaus mal sinnvoll sein?
Jens
Wie schlau ist das Betriebssystem denn bei der Zuordnung eines Threads zu einem Prozessorkern? Dass ein neuer Thread nicht einem schon grenzwertig an 100%-Auslastungsgrenze entlangschrammendem Kern zugeordnet wird, kann ich mir gut vorstellen. Aber wird einem im Laufe der Zeit immer aufwändigerem Thread eventuell mal ein neuer Kern zugeordnet? Da vermute ich nein.
Infolgedessen könnte die händische Zuordnung durchaus mal sinnvoll sein?
Jens
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mehrere Threads vs. mehrere Kerne
Ich denke mal eher nicht. Um Deinen Thread auf einen anderen Kern "auszulagern" müßte dieser erstmalInfolgedessen könnte die händische Zuordnung durchaus mal sinnvoll sein?
beendet werden und ein neuer erstellt werden. Dieser Aufwand ist meist zu groß um irgendwas zu bewirken.
Das OS wird jetzt alle "neuen" Threads autom. einem anderem Kern zuordnen, so das sich dies von alleine
regelt.
Kerne zuordnen tun nur Leute, die viel Ahnung von nichts haben, um dann zu erreichen, das Ihr Super Duper Programm
einen Zacken schneller läuft, egal was mit den restlichen Programmen passiert. Ich denke mal, es gibt kaum Anwendungen,
die Vorrang vor anderen haben und nur Einsteiger denken immer, mein Programm muß richtig schnell laufen, laß die anderen
doch verrecken. So kann Multitasking nicht funktionieren. Ausnahme wären leistungshungrige Spiele, wobei man dann
besser die anderen Threads vorher beendet/pausiert.
Das OS hat als einziger den Überblick, was am besten für den Computer ist, da arbeiten viele Programmierer bereits seit
Jahrzehnten dran und verbessern es laufend.
Mein Rat: Laß die Finger davon! Mach lieber viele Threads, damit das OS diese gut verteilen kann und kümmere Dich
lieber um Threadsicherheit, da hast genug zu tun
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
-
- Beiträge: 8
- Registriert: 03.01.2017 18:28
Re: Mehrere Threads vs. mehrere Kerne
Das klingt überzeugend.
Also das Betriebssystem die Arbeit machen lassen.
Außerdem habe ich gerade gelesen, dass zumindest Linux in Ausnahmefällen einen Thread sogar automatisch auf einen anderen Kern verlagern kann. Windows wird das dann wohl auch können.
Purebasic habe ich erst vor kurzem entdeckt. Nicht nur die Sprache ist beeindruckend, sondern auch die schnellen, kompetenten und freundlichen Antworten in diesem Forum.
Herzlichen Dank.
Jens
Also das Betriebssystem die Arbeit machen lassen.
Außerdem habe ich gerade gelesen, dass zumindest Linux in Ausnahmefällen einen Thread sogar automatisch auf einen anderen Kern verlagern kann. Windows wird das dann wohl auch können.
Purebasic habe ich erst vor kurzem entdeckt. Nicht nur die Sprache ist beeindruckend, sondern auch die schnellen, kompetenten und freundlichen Antworten in diesem Forum.
Herzlichen Dank.
Jens
Re: Mehrere Threads vs. mehrere Kerne
Ich hatte mal einen Test gemacht (dieses a^2+3ab+b^2 Problem hier) und da haben Threads die Sache stark beschleunigt und es wurden auch alle Kerne belastet. Von daher, wenn du die Aufgabe in unabhängige Teile zerlegen kannst, nutzte Threads. Pass nur auf, das nicht auf gleiche Resourcen (linked list etc.) gleichzeitig zugegriffen wird.
Oder werden Linked List automatisch geschützt? Strings sind ohne entsprechende Compilereinstellung auch sehr kritisch!
Oder werden Linked List automatisch geschützt? Strings sind ohne entsprechende Compilereinstellung auch sehr kritisch!
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!