Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   programm mit thread langsamer als ohne (https://www.delphipraxis.net/160902-programm-mit-thread-langsamer-als-ohne.html)

shmia 8. Jun 2011 15:25

AW: programm mit thread langsamer als ohne
 
Mal so rein grundsätzlich:
Bei reinen Rechenthreads darf man maximal so viele Thread benützen, wie unabhängige CPU-Kerne im System vorhanden sind.
Beispiel:
4 logische Cores (Hypherthreading), 2 physische Cores
Hier darf man maximal 2 Rechenthreads verwenden.
Würde man 4 Threads verwenden, dann würde zwar jeder logische Core voll ausgelastet werden, die Gesamtperformance wäre aber schlechter als bei nur 2 Threads.

canonmclay 8. Jun 2011 15:42

AW: programm mit thread langsamer als ohne
 
klingt logisch^^... ich hab ja 2 "echte" kerne... aber es fluppt halt nichtmal bei einem Thread :/

SirThornberry 8. Jun 2011 17:39

AW: programm mit thread langsamer als ohne
 
Bei dir ist ganz klar das syncronize schuld.
Und wenn du nur einen Thread hast ist auch klar das es langsamer ist. Denn neben deinem einen Thread gibt es ja immer noch den Hauptthread der auch ab und an Rechenzeit braucht für die Darstellung etc.
Aber an deinem Quelltext ist ganz klar das Syncronize als Falschenhals auszumachen. Poste doch lieber Nachrichten an den Hauptthread oder stopf den Status in eine Variable die vom Hauptthread in Regelmäßigen Abständen abgefragt wird. Das ist alle mal schneller als ein syncronize.

canonmclay 8. Jun 2011 20:25

AW: programm mit thread langsamer als ohne
 
synchro KANN gar nicht schuld sein, denn dann müsste das ja 14 sek brauchen um in dieser zeit 2 mal zu aktualisieren, und das wäre ein wenig viel oder?

Außerdem habe ich das testweise mal auskommentiert und es hat sich nichts verbessert...

der hauptthread kann ja gar nicht so viel ziehn, außerdem ist meine cpu auslastung (task manager) bei genau 50%, also müsste der hauptthread ja extrem viel ziehn, obwohl der ja gar nix macht...

canonmclay 9. Jun 2011 18:48

AW: programm mit thread langsamer als ohne
 
so ich gebs auf^^... leider hat keiner der denkansätze mehr was ergeben (ich hab sogar meinen inkompetenten ex-infolehrer gefragt, der hat mich mit fragezeichen in den augen angeschaut, als ich was von Threads erzählt habe...)

fazit: ich versuch dieses Progi mit c++ und werde mich da mal einarbeiten ;)


vielen Danke für eure hilfe :-D

greez McLay

Aphton 9. Jun 2011 18:58

AW: programm mit thread langsamer als ohne
 
Lol, du bist lustig.
Du denkst mit c++ wird das anders? Nicht die Programmiersprache ist schuld, sondern der, der sie falsch verwendet!

ULIK 9. Jun 2011 19:16

AW: programm mit thread langsamer als ohne
 
Zitat:

Zitat von canonmclay (Beitrag 1105545)
so ich gebs auf^^... leider hat keiner der denkansätze mehr was ergeben (ich hab sogar meinen inkompetenten ex-infolehrer gefragt, der hat mich mit fragezeichen in den augen angeschaut, als ich was von Threads erzählt habe...)

fazit: ich versuch dieses Progi mit c++ und werde mich da mal einarbeiten ;)


vielen Danke für eure hilfe :-D

greez McLay

Hast Du denn jetzt schon mal die einzelnen Zeiten gemessen?! Wie lange [ms] z.B. braucht denn die Execute Methode?
Und vor allem: wie oft wird denn der Thread gestartet? Zähl das doch mal mit.


Grüße,
Uli

canonmclay 10. Jun 2011 00:20

AW: programm mit thread langsamer als ohne
 
also für einen ganz durchlauf der knacke funktion werden ca. 18 sek benötigt.

die Zeit bis vor dem ersten synchro ist nicht messbar (zu klein, wird 0 ausgegeben)

die zeit für den ersten synchro ist 0,0004 sek

die zeit für das durchlaufen der while schleife (damit man nicht umblättern muss hier nochmal der code... :) )

Delphi-Quellcode:
 queryperformancecounter(zeit1);
   abc:='  ';//Das sind die ERSTEN Acsii-Zeichen (3x leer) mit denen begonnen wird

   while length(abc)<4 do
     begin
       if suchwort=MD5Print(MD5String(ersterbuchstabe+abc)) then
         begin
           g:=true;
           result:=abc;
           break;
         end; // if suchwort

       abc:=strhoeher(abc);
     end; // while

  queryperformancecounter(zeit2);
  zeitberechnen((zeit2-zeit1),ges);
  showmessage(ges);
dauert ca. 18 sek. also muss hier ja der fehler liegen. Da diese Stelle aber 1 zu 1 übernommen wurde aus dem Programm ohne Threads, weiß ich halt echt nicht mehr weiter.


der thread wird einmal gestartet (hab mit process explorer nochmal nachgeschaut :) ), also an zu vielen threads wirds eher nicht liegen... und halt sobald er fertig gelaufen ist, wird der nächste angestoßen.


zu dem c++: ich wollt das erstens schon immer mal lernen (hab hier n einführungsbuch rumfliegen^^), und man kann damit auch dann das ganze für die grafikkarten (CUDA) programmieren ;). Zudem ist das denk ich mal ne ganz gute fingerübung mal n progri in eine andere sprache zu übersetzen :P. Zuletzt ist c++ in meinem späteren Beruf eher wichtig, als das anwenderorientierte delphi, von daher tue ich mir in dem Bereich direkt einen gefallen ;). Und außerdem, wenn das mit c++ besser läuft, werde ich versuchen (kA ob das geht, aber heutzutage ist ja alles möglich :P), die Rechenroutine mit den threads (wer weiß villt klappts damit ja doch besser :) ), mit dem Delphi projekt zu verbinden, sodass ich die Server - Client aplikation weiterhin nutzen kann, die ich extreeeeeemst praktisch finde bei delphi :). Außerdem keine sorge, ich werde auch weiterhin delphi nutzen, eben aufgrund der einfach zu gestaltenden oberflächen ;)


Zitat:

Zitat von Aphton (Beitrag 1105546)
Lol, du bist lustig.
Du denkst mit c++ wird das anders? Nicht die Programmiersprache ist schuld, sondern der, der sie falsch verwendet!

bevor ich mich auf die Anklagebank setzte und mir anhören muss, das ich zu doof bin das zu programmieren, bitte ich den ankläger um einen evtl. anderen Lösungsvorschlag :)

PS: JA ich mag smileys :P

jaenicke 10. Jun 2011 06:03

AW: programm mit thread langsamer als ohne
 
Ich muss das mal mit Delphi 6 probieren. Denn mit Delphi XE kann ich keine nennenswerten Unterschiede zwischen den Versionen feststellen.

Kannst du das bitte einmal inkl. deiner Zeitmessung anhängen? Ich würde dann einmal einen virtuellen PC mit Delphi 6 nehmen und es heute Abend dort testen, vielleicht liegt es ja an der Delphiversion...

Jumpy 10. Jun 2011 08:09

AW: programm mit thread langsamer als ohne
 
Zitat:

der thread wird einmal gestartet (hab mit process explorer nochmal nachgeschaut :) ), also an zu vielen threads wirds eher nicht liegen... und halt sobald er fertig gelaufen ist, wird der nächste angestoßen.
Ich hab mich in Threads bisher erst eingelesen und warte noch auf eine sinnvolle Aufgabe, das mal einzusetzen, aber obige Aussage kommt mir komisch vor.

Wenn (ausser dem Hauptthread) nur ein Thread da ist: Wo ist da der Sinn (außer man will Fortschrittsbalken steuern oder ähnl.) Müsste man denn nicht mindestens zwei machen, die parallel Arbeiten? Wie rechenintensiv müssen Aufgaben sein (nicht sehr, ich weiß, aber e bissle doch schon, oder?), dass Programmierung mit Threads trotz es Overheads effektiver wird als ohne?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Seite 2 von 3     12 3      

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