![]() |
[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. |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Für so etwas gibt es mehr oder minder umfangreiche Bibliotheken. Spontan fällt mir da
![]() ![]() |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Es gibt in der DP einige Ansätze zu einem
![]() Für das Feststellen der ![]() 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: |
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) |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Guten Morgen,
willst Du bestimmte ![]() 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 |
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. |
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. |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Zitat:
|
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Zitat:
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. |
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
|
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
OTL hat einige Demos, die unter Test stehen.
Aus meiner Sicht verwirren die ersten aber doch sehr, da sie nicht mehr aktuell sind. Die Richtigen beginnen erst irgendwo in den 30igern. "Parallel" ist das Stichwort. Damit würde ich beginnen. Es ist Test 35. |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Vielleicht auch ganz interessant:
![]() |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Zitat:
.. aber kennt jemand einen Grund dafür warum das so ist/sein soll. Habe leider keinen Rechner mit der entsprechenden Anzahl von Kernen. Grüße Klaus |
AW: [Delphi] Thread-Organisation mit Mehrkern-CPUs
Ok, das mit den Download ist gerade etwas schwierig.
Der S&S Verlag hat bei dem Heft wohl vergessen alle Sourcen aus dem Heft zu hinterlegen. Es wäre sonst hier gewesen: ![]() Der andere Möglichkeit wäre die DT2011 Homepage gewesen, ich hatte Daniel die Folien und Quellen zur Verfügung gestellt. Leider gibt es nun eine neue Seite für die DT'12 :-( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz