![]() |
THreads in ein Array schreiben
ich benötige für meine Anwendung ein Array of integer of integer . Dieses Array möchte ich gleichzeitig durch mehrere Threads beschreiben, ich bin auf der Suche nach DEMO Code zu diesem Problem.
Kann jemand weitzerhelfen ? |
AW: THreads in ein Array schreiben
Wenn das Array sich in den Dimensionen nicht ändert und die Threads beim schreiben nicht kollidieren können (z.B.)jeder Thread eine andere Zeile bearbeitet muss man gar nichts beachten.
Ansonsten würde ich über die Werte über eine Prozedur setzen bzw. Funktion lesen lassen die mit CriticalSections verriegelt ist ala ![]() ![]() |
AW: THreads in ein Array schreiben
Wobei das Problem an sich ziemlich interessant ist, denn auch wenn eine Critical Section wenig Overhead erzeugt, kann man da vielleicht noch etwas drehen, aber eine Demo kann man nur erstellen, wenn man weiß, wie die Matrix genau beschrieben wird.
Kann man die Operation vielleicht so aufteilen, das keine CS benötigt wird? Mehr Threads als CPUs bringen bezüglich Performancegewinn nichts, also könnte man die Matrix in N (N=Anzahl Core) Abschnitte aufteilen, die gleichzeitig befüllt werden. Sind die Berechnungen einer Zelle X,Y von dem Ergebnis anderer Zelle abhängig? Dann müsste zusätzlich ein Synchronisationsmechanismus her. |
AW: THreads in ein Array schreiben
Man könnte auch mehrere CriticalSections verwenden, z.B. je Eine für die erste Array-Ebene,
falls die Threads nicht nur je auf ein Unterarray zugreifen. |
AW: THreads in ein Array schreiben
Zitat:
|
AW: THreads in ein Array schreiben
im Ereignis Thread.Create(....) übergebe ich ein Array ancc vom Typ array or array of Real
Bei dem Aufruf von Thread.Execute; schreibt die letzte Anweisung in ein bestimmtetes Segment von ancc. Jeder Thread soll in ein bestimmtest Segment schreiben, die Segmente haben keine Überlappung. Leider schreibt nur der erste THread seine Daten richtig in mein Array ancc , die anderen Threads scheinen überhaupt nichts am Feld zu verändern
Delphi-Quellcode:
TFASTNCCThread = class(TThread) private FSearchArea : TRect; Ftemplatefct : T2Dfct; Ffeaturefct : T2Dfct; FnccGlobal : T2Dfct; FNCCLocal : T2Dfct; protected procedure Execute; override; public constructor create(atemplatefct, afeaturefct : T2Dfct; var ancc : T2Dfct ; aSearchArea: TRect ); end; constructor TFASTNCCThread.create( atemplatefct, afeaturefct : T2Dfct; var ancc : T2Dfct ; aSearchArea: TRect ); begin inherited Create(True); FSearchArea := aSearchArea; ftemplatefct := atemplatefct; ffeaturefct := afeaturefct; FnccGlobal:= ancc; end; procedure TFASTNCCThread.Execute; begin NameThreadForDebugging('FASTNCCThread'); { Thread-Code hier einfügen } try fastcrosscorrelation( ...... ); except // on e : exception do // begin // do something in case of an error // end; end; NCCCopyLocalArraytoGlobalArray(FnccLocal, FnccGlobal, fsearchArea ); // write back results to ancc array end; |
AW: THreads in ein Array schreiben
was da : write back results to ancc array
passiert dürfte der interessante Teil sein .... wenn Du direkt auf dem per var übergebenen Array arbeitest und die Offsetparameter passen sollte es laufen ... |
AW: THreads in ein Array schreiben
Stimmt, das schreiben in das Array ist nicht das Problem, allerdings die Rechenzeit, welche unverändert bleibt :(
Delphi-Quellcode:
egal wieviele Threads ich starte die Rechenzeit bleibt immer konstantfor i:= 0 to MaxThreads-1 do begin aFASTNCCThread:= TFASTNCCThread.Create ( ..... ); aFastNCCThread.Execute; end; |
AW: THreads in ein Array schreiben
wieso rufst Du Execute auf? Start wäre im Threadkontext, oder create ohne suspended
|
AW: THreads in ein Array schreiben
ich habe die Berechnung der jeweiligen Teilmatrix in die Routine Thread.execute gepackt.
Vom Verständnis müsste er doch Thread.Execute starten, aber nicht auf die Beendigung dieser Anweisung warten sondern gleich den nächsten THREAD erzeugen und starten.... sehe ich etwa falsch ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz