AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread auf mehrere Core verteilen

Ein Thema von EWeiss · begonnen am 18. Sep 2013 · letzter Beitrag vom 20. Sep 2013
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 14:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.017 Beiträge
 
Delphi 12 Athens
 
#2

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 15:02
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#3

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 15:02
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.
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 15:08
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 15:29
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
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 16:22
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 16:35
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

Geändert von EWeiss (18. Sep 2013 um 16:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.017 Beiträge
 
Delphi 12 Athens
 
#8

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 16:49
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 17:30
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
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#10

AW: Thread auf mehrere Core verteilen

  Alt 18. Sep 2013, 17:55
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.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 Uhr.
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