Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Thread auf mehrere Core verteilen (https://www.delphipraxis.net/176642-thread-auf-mehrere-core-verteilen.html)

EWeiss 18. Sep 2013 14:58

Thread auf mehrere Core verteilen
 
Vielleicht ist der Titel etwas blöd gewählt.

Ist es möglich in Delphi einen Thread über 2 Core laufen zu lassen?
Wenn ich nur einen verwende lastet die Anwendung aus wenn von einem Kern 100% verwendet wird.

Keine Ahnung ob sowas überhaupt möglich ist eventuell MultiThreads?
Aber wie bei nur einer Funktion (RenderThread)

Vielleicht ist die Frage aber auch einfach nur bescheuert ;)

gruss

Uwe Raabe 18. Sep 2013 15:02

AW: Thread auf mehrere Core verteilen
 
Ein Thread läuft immer nur auf einem Kern. Bei einer hyper-threading fähigen CPU ist das dann ein virtueller Kern. Wenn du mehrere Kerne nutzen möchtest, musst du die Aufgabe in mehrere Teile aufsplitten und in separaten Threads laufen lassen. Die Schwierigkeit dabei ist halt oft das Aufsplitten.

Meflin 18. Sep 2013 15:02

AW: Thread auf mehrere Core verteilen
 
Ein Thread kann nicht gleichzeitig auf mehreren Cores laufen. Das ergibt auch einfach keinen Sinn. Wenn du mehrere Cores gleichzeitig auslasten willst, musst du deine Arbeit eben auf entsprechend viele Threads aufteilen.

BUG 18. Sep 2013 15:08

AW: Thread auf mehrere Core verteilen
 
Du kannst deinen Thread nicht automatisch auf mehreren Kernen ausführen lassen. Das heißt, du musst dir Gedanken machen ob und wie man dein Problem parallelisieren kann.
Das hängt aber sehr davon ab, was deine Funktion überhaupt macht und wie die Ressourcen aussehen, auf die da zugegriffen wird. Womöglich musst du einiges anfassen, um überhaupt parallelisieren zu können.

EWeiss 18. Sep 2013 15:29

AW: Thread auf mehrere Core verteilen
 
Zitat:

Zitat von BUG (Beitrag 1228948)
Du kannst deinen Thread nicht automatisch auf mehreren Kernen ausführen lassen. Das heißt, du musst dir Gedanken machen ob und wie man dein Problem parallelisieren kann.
Das hängt aber sehr davon ab, was deine Funktion überhaupt macht und wie die Ressourcen aussehen, auf die da zugegriffen wird. Womöglich musst du einiges anfassen, um überhaupt parallelisieren zu können.

Ich sehe schon das hört sich wirklich schwierig an.
Die Function tut nichts anderes als FFT Daten zu analysieren, visualisiert auszugeben.
Das problem dabei es läuft über mehrere ebenen.

Anwendung, DLL als wrapper zu einer anderen DLL.. Sonique Plugins als Beispiel.
Diese Visualisieren dann die FFT Daten die übergeben werden.
Das problem ist dabei das diese eigentlich nur für Fenster größen 512x512 ausgelegt sind was natürlich
bei einem VollBild von 1920x1200 als bsp. immense probleme verursacht.

Hab das jetzt so umgestellt das man im Vollbild gehen kann in dem ich den Usern einen Viewport zur verfügung stelle
so das die Visualisierungen in einem Vollbild wie schon genannt in unterschiedlichen Viewports gerendert werden kann (512x348 bsp.)
Aber ganz komme ich immer noch nicht hin was die auslastung des einen Kern's angeht.

Hab zwar nur max 25% CPU auslastung bringt mir aber nichts wenn ein Kern mit voller last läuft.
Die Anwendung hängt dann unweigerlich.

gruss

BUG 18. Sep 2013 16:22

AW: Thread auf mehrere Core verteilen
 
Zitat:

Zitat von EWeiss (Beitrag 1228957)
Die Function tut nichts anderes als FFT Daten zu analysieren, visualisiert auszugeben.

Ich nehme mal an, dass die FFT das Arbeitsintensive ist. Man könnte eine parallele Implementierung ausprobieren (scheint Bei Google suchenviel Material dazu geben).
Andererseits ist die Frage, ob du wirklich alle Frequenzen pixelgenau darstellen musst. Eventuell könntest du Zwischenergebnisse interpolieren.

EWeiss 18. Sep 2013 16:35

AW: Thread auf mehrere Core verteilen
 
Zitat:

Andererseits ist die Frage, ob du wirklich alle Frequenzen pixelgenau darstellen musst.
Habe ich ja keinen Einfluss drauf da das zeichnen aus den Plugins heraus geschieht.
Etwas habe ich es ja schon entspannen können aufgrund der Viewports.
Die Auslastung ist von einigen Faktoren abhängig Rendertiming größe des Viewport und ob OGL oder GDI verwendet wird.

Hab gelesen das es in C++ / Net möglich sein soll Multithreads zu erstellen.
Bei Delphi sagt man das es nicht so einfach funktionieren soll. (ohne extremen Aufwand)

Na ja schade eigentlich.
Muss es dann wohl so belassen, wieder mal na grenzen gestoßen.. ;)

Zitat:

Man könnte eine parallele Implementierung ausprobieren
Gibts nicht viel möglichkeiten da diese vom stream über die Bass.dll zurückgegeben werden.

gruss

Uwe Raabe 18. Sep 2013 16:49

AW: Thread auf mehrere Core verteilen
 
Zitat:

Zitat von EWeiss (Beitrag 1228971)
Hab gelesen das es in C++ / Net möglich sein soll Multithreads zu erstellen.
Bei Delphi sagt man das es nicht so einfach funktionieren soll. (ohne extremen Aufwand)

Der Aufwand ist in beiden Umgebungen vergleichbar. Einen zusätzlichen Thread zu erstellen ist in Delphi mindestens so einfach wie in einer anderen Umgebung. Die Probleme liegen eher darin, einen Algorithmus zu verwenden, der nicht nur threadsicher ist, sondern auch praktikabel skaliert.

Wenn du lediglich das Hängen der Anwendung vermeiden willst, reicht es ja schon, wenn du die Berechnung insgesamt in einen eigenen Thread verlagerst.

EWeiss 18. Sep 2013 17:30

AW: Thread auf mehrere Core verteilen
 
Zitat:

Wenn du lediglich das Hängen der Anwendung vermeiden willst, reicht es ja schon, wenn du die Berechnung insgesamt in einen eigenen Thread verlagerst.
Hab ich ja schon..
Einen der nur für die berechnungen zuständig ist.

Ich verstehe nicht warum ein System nicht in der lage ist zu erkennen wenn ein core ausgelastet ist
um dann diesen auf die übrigen zu verteilen.
Was für einen Sinn hat sonst ein 4 Kern prozessor wenn er nicht dynamisch vom system verwaltet wird
um eventuelle auslastungen eines Kerns zu verhindern.

gruss

Robotiker 18. Sep 2013 17:55

AW: Thread auf mehrere Core verteilen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1228973)
Der Aufwand ist in beiden Umgebungen vergleichbar. Einen zusätzlichen Thread zu erstellen ist in Delphi mindestens so einfach .

Jein. Für normale von Hand programmierte Threads ist das richtig.

Zitat:

Zitat von EWeiss (Beitrag 1228984)
Ich verstehe nicht warum ein System nicht in der lage ist zu erkennen wenn ein core ausgelastet ist
um dann diesen auf die übrigen zu verteilen.

Moderne Compiler (CLang, Intel Fortran oder C++, MS VC++) können sowas in der Art. Entweder über Autoparallelisierung
http://msdn.microsoft.com/en-us/library/hh872235.aspx
über OpenMP
http://openmp.org/wp/
oder über Bibliotheken
https://www.threadingbuildingblocks.org/home
http://msdn.microsoft.com/de-de/libr.../dd492418.aspx

Das findet aber alles außerhalb der Pascal Welt statt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.
Seite 1 von 5  1 23     Letzte »    

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