Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Hallo,
vorab ich Schliesse zu 100%, dass Synchronize in diesem Beispiel an der Verlangsamung Schuld ist, da es bei Beiden Zeitmessungen eingesetzt wird, MUSS die Verzögerung durch diesen Befehl bei beiden Zeitmessungen gleich sein! Die Problematik der Single,Dual Prozessoren & HTT möchte ich hier Bitte nicht besprechen!!!!!!!!!!!!!!!!!! Denn diese MultiThreading Anwendung ist bei Single & Mehr Cpu's langsamer!!! Mir geht es darum, wie kann ich diese Rechenintensive Integer Anwendung beschleunigen, dass ich auf einer SingleCore CPU langsamer bin, ist klar. Mir geht es darum, wenn ich Varibalen mehrmals übergeben muss,zwischen den Threads,wie kann ich das effizent tun, wenn der Thread immer wieder angesteuert wird! Meiner Meinung nach gute Ansetze: Zitat:
Zitat:
Zitat:
Zitat:
|
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Zitat:
|
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Solange Du zwischendurch kein langsames I/O machst, bringt doch mehr als ein Thread pro CPU rein gar nichts.
Ermittle also die Anzahl der CPUs, Teile deine Aufgabe in gleich große Häppchen, sodaß eben pro CPU ein Happen übrig bleibt, verteile die Aufgaben und lehne dich zurück. Bist Du Dir sicher, das die Berechnung hinreichend optimiert wurde? Meistens liegt das Performanceproblem nicht in der Menge der Daten, sondern im Design des Algorithmus. |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
@ alzaimar
Gibt es dafür ein Beispiel,mit der Übergabe der Variablen? |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Zitat:
Und weil du das 14 mal (0..13) durchläufst, kannst du gleich statt der +1 eine +14 hinschreiben und dir die äußere Schleife ersparen. Das SumInt() kannst dabei auch gleich in deine Schleife integrieren. Synchronize: Synchronize stoppt den Thread und wartet auf den Hauptthread, bis der in der Messageloop "vorbeischaut". Das kann je nach umständen recht lange dauern. Dann doch lieber mit PostMessage() an das Formular eine eigene Botschaft schicken. So wird der Thread nicht ausgebremst. |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
@JbP
Es geht hier nicht um den Sinn Der Formel, Sie soll nur als Beispiel dienen und Rechenleistung kosten! Zum Zweiten mal!!!!!! Es kann nicht an Synchronize liegen, nehmt es raus aus dem Programm und ihr werdet es merken!!!!!!!!!!!!!!!!! |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Hallo,
Zitat:
Also 'mal ganz langsam zum Mitschreiben:
Zitat:
Gruß xaromz |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
@xaromz
Richtig,xaromz Synchronize stellt hier kein Problem dar. Was WILL ich, ich will das 2 Threads, die in einer Schleife immer wieder aufgerufen werden,so zügig arbeiten, dass sich bei einem Dualcoresystem der Aufwand lohnt, siehe erster Beitrag und Titel, da dieses Beispiel auch bei Dualkern-Systemen Langsamer läuft! Ohne Frage ein Problem: Ein Thread lohnt sich erst, wenn die zu leistende Arbeit auch langwierig genug ist. Sonst frisst nämlich der Overhead die Ersparnis auf Multi-Prozessor-Systemen auf. Hier ist auch das Problem dieses Beispiels zu suchen. Meine Meinung ist ja, dass das ewige erstellen zu viel Zeit kostet, dass müsste man doch um gehen können? Meine Theorie war: Den Thread erstellen Dann ab in die Schleife Werte Übergeben, abarbeiten, Werte zurückgeben, Thread anhalten, Werte übergeben, Werte abarbeiten................. Schleife zu Ende, Thread schliessen |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Moin Thomas,
Zitat:
Ich habe nämlich den "bösen" verdacht, dass dies nicht automatisch geschieht, so dass sich zwei Threads eine CPU teilen, wie auf einem Einzelprozessor-System. Wie mit der Funktion genau umzugehen ist, kann ich Dir allerdings leider auch nicht sagen. :? |
Re: MultiThreading Bei mir ca. 40x Langsamer bei IntegerBere
Hallo,
Zitat:
Abgesehen davon habe ich mir jetz doch mal Deinen Quellcode angesehen. Ein Konzept konnte ich da leider ebenso wenig entdecken wie einen einheitlichen Stil. Deine Versuche, einen Thread zu erzeugen, der dann wieder eigene Thread erzeugt, und zwar nach einem wie auch immer gearteten Schlüssel, sind irgendwie komisch :gruebel: . Statt eines akademischen Aufbaus wäre eine konkrete Anwendung besser, dann kann Dir sicher auch geholfen werden. Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 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