AGB  ·  Datenschutz  ·  Impressum  







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

THreads in ein Array schreiben

Ein Thema von bernhard_LA · begonnen am 22. Mär 2012 · letzter Beitrag vom 29. Mär 2012
Antwort Antwort
Seite 1 von 3  1 23      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

THreads in ein Array schreiben

  Alt 22. Mär 2012, 23:36
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: THreads in ein Array schreiben

  Alt 22. Mär 2012, 23:55
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
http://www.delphipraxis.net/167197-a...onisieren.html
http://www.delphipraxis.net/128266-t...erstellen.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: THreads in ein Array schreiben

  Alt 23. Mär 2012, 07:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: THreads in ein Array schreiben

  Alt 23. Mär 2012, 09:38
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

AW: THreads in ein Array schreiben

  Alt 23. Mär 2012, 17:34
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.
Doch, zumindest war das früher so. Wenn man ein Integer schreibt, dieser aber nicht genau am Speicher ausgerichtet ist wird der Speicher davor und/oder dahinter auch gelesen und geschrieben. Und wenn ein anderer Thread gerade im selben Bereich unterwegs ist kann das schon kollidieren
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: THreads in ein Array schreiben

  Alt 26. Mär 2012, 18:21
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;

Geändert von bernhard_LA (26. Mär 2012 um 18:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: THreads in ein Array schreiben

  Alt 26. Mär 2012, 18:32
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 ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 09:13
Stimmt, das schreiben in das Array ist nicht das Problem, allerdings die Rechenzeit, welche unverändert bleibt

Delphi-Quellcode:

     for i:= 0 to MaxThreads-1 do
       begin

       aFASTNCCThread:= TFASTNCCThread.Create ( ..... );

       aFastNCCThread.Execute;

       end;
egal wieviele Threads ich starte die Rechenzeit bleibt immer konstant
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 09:28
wieso rufst Du Execute auf? Start wäre im Threadkontext, oder create ohne suspended
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 09:54
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 ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:17 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