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/)
-   -   [Delphi] Thread-Organisation mit Mehrkern-CPUs (https://www.delphipraxis.net/166511-%5Bdelphi%5D-thread-organisation-mit-mehrkern-cpus.html)

UliBru 16. Feb 2012 08:29

[Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt da so ein nettes Beispiel für die Anwendung von Threads im Zusammenhang mit Mehrkern-CPUs.
Zum Programm dBPowerAmp gibt es einen Konverter welcher irgendwelche Musikdateien im Batch in ein anderes Format umwandelt.
Und dabei zeigt sich beim Wandeln in mp3 das im Anhang dargestellte Bild.

Es wird also festgestellt, wieviele CPU-Kerne, also reale und virtuelle, vorhanden sind. Jedem Kern wird dann die Umwandlung einer Datei als Aufgabe/Thread zugeteilt. Wenn ein Kern fertig ist, bekommt er die nächste Datei beauftragt. Hübsch gemacht ist dabei auch die Fortschrittsanzeige. Bei dieser Art von Bearbeitung sind die Teilaufgaben voneinander unabhängig.

Ich würde so eine Grundstruktur einer Threaderstellung und -bearbeitung gerne mit Delphi realisieren.
Dazu braucht es ja wohl
eine Prozedur, die die Anzahl der Kerne feststellt
eine Organisation, die die Gesamtaufgabe verwaltet
eine Zuweisung eines Threads zur Bearbeitung einer Teilaufgabe an einen nächsten freien Kern *
Strukturen, die das Anhalten bzw. Beenden (Pause, Cancel) ermöglichen als auch die Fortschrittsanzeige realisieren.

So stell ich mir das bescheidenerweise vor. Da ich praktisch keine Erfahrung mit Threads habe, hoffe ich, hier Tipps bzw. Code-Snippets zu bekommen, mit denen ich das realisieren kann. Die Struktur sollte für beliebige ähnliche gelagerte Aufgaben, die unabhängig voneinander parallel laufen können, geeignet sein.

Uli

* wann ist ein Kern eigentlich als frei zu betrachten? Es laufen ja parallel noch beliebig andere Prozesse inkl. der o.g. Organisation der Threads.

DeddyH 16. Feb 2012 08:36

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Für so etwas gibt es mehr oder minder umfangreiche Bibliotheken. Spontan fällt mir da OTL ein, evtl. ist das auch mit Andreas' AsyncCalls machbar (hab ich mir noch nicht angeschaut).

BUG 16. Feb 2012 08:41

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Es gibt in der DP einige Ansätze zu einem Hier im Forum suchenThreadpool, dass sollte deinem Wunsch nahe kommen.
Für das Feststellen der Hier im Forum suchenAnzahl der Kerne sollte die Suche auch was finden.
Die Kommunikation mit dem Job, der von Thread ausgeführt wird, musst du dir vmtl. selbst stricken.

PS: Mir fällt gerade erst auf, dass Thread-Pools so etwas wie Scheduling auf Anwendungsebene sind :roteyes:

generic 16. Feb 2012 08:59

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Ja, die OTL ist eine gute Wahl.

Mit dem ForEach oder mit den Pipelines kann man das prima machen.

Allerdings würde ich von der Idee Abstand nehmen eine bestimmte Aufgabe einer bestimmten CPU zu geben.
Lass das lieber das OS entscheiden.


Entwickler Magazin (Ausgabe: 05.11) Artikel: Multithreading mit der Omni Thread Lib (OTL)

Klaus01 16. Feb 2012 09:05

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Guten Morgen,

willst Du bestimmte Threads auf einen CPU Kern festlegen?

Bei einem Threadpool wird das OS die Verteilung übernehmen.
Die Threadpoolgröße könnte dann abhänging von der Kernanzahl sein z.B. zwei Threads pro Kern.

Grüße
Klaus

UliBru 16. Feb 2012 09:36

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Also ich möchte gerne rechenintensive Prozesse (Convolution) im Zusammenhang mit mehrkanaliger Audioausgabe so effektiv wie möglich gestalten. Anstelle nun einen Kanal nach dem andern zu bearbeiten, kann ich ja eben die vorhandenen CPU-Kerne nutzen. Wobei mir aufgefallen ist, dass bei einer einfachen Threadvergabe nun nur bis vier Kerne beschäftigt sind, aber eben nicht alle acht.

Mmh, das es OTL gibt weiss ich auch. Aber bisher hab ich den Aufwand gescheut mich da reinzuarbeiten. Wie immer ist der Anfang schwierig, weil ziviel Info.

Andererseits war mir eben nun aufgefallen, wie locker das in der Anwendung bei dBPowerAmp aussieht. Dort wird ja gezielt den Kernen zugewiesen. Was ja all den Meinungen widerspricht, die hier in anderen Beiträgen vertreten wurden. So mit Inhalt: Finger weg von SetThreadAffinityMask, lass dass das OS selber machen. Es scheint wohl doch kein klares Rezept zu geben.

generic 16. Feb 2012 10:41

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
lade die die Heft Beispiele herunter. Diese sind aufs Minimum reduziert.
Alternativ lade dir die Beispiele von den Delphi-Tagen 2011 runter.
Da habe ich auch mini Beispiele gezeigt.

UliBru 16. Feb 2012 11:20

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Zitat:

Zitat von generic (Beitrag 1151381)
lade die die Heft Beispiele herunter. Diese sind aufs Minimum reduziert.
Alternativ lade dir die Beispiele von den Delphi-Tagen 2011 runter.
Da habe ich auch mini Beispiele gezeigt.

Kannst Du bitte so nett sein und etwas mehr preisgeben? Welche Heft Beispiele? Und zumindest derzeit gibt es keine Beispiele bei delphitage.de. Gibt es irgendwelche Links?

Jens01 16. Feb 2012 11:53

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Zitat:

Gibt es irgendwelche Links?
generic hat unter dem Namen Bernd Ott einen guten Artikel im Entwickler-Magazin (5.2011) geschrieben inklusive kleiner Beispiele.
Wenn ich Dir das jetzt hier reinstelle, gibt es wohl Ärger.
Es gibt von dem Entwickler von OTL ein gutes Video auf Coderage 6 und dieser beginnt auch mit einem Wiki auf seiner Seite.

UliBru 16. Feb 2012 12:32

AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
 
Ok, ich befasse mich mal mit OTL - es gibt da ja einen Haufen Doku - und komme dann mit Fragen zurück, so ich sie denn (sicher) haben werde :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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