Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kleines Listenproblem (beginner) (https://www.delphipraxis.net/127976-kleines-listenproblem-beginner.html)

derhanes 22. Jan 2009 06:14


Kleines Listenproblem (beginner)
 
hallo,

ich habe hier eine liste sagewireinmal von 1-100.
diese wird nun in 4 versch. (voneinander unabhänigen) schleifen abgearbeitet.
also

Delphi-Quellcode:
while x<=100 do begin // A-erste
 if x = mache was...
end;
Delphi-Quellcode:
while x<=100 do begin // B-zweite
 if x = mache was...
end;
Delphi-Quellcode:
while x<=100 do begin // C-dritte
 if x = mache was...
end;
Delphi-Quellcode:
while x<=100 do begin // D-vierte
 if x = mache was...
end;
es soll nun so laufen das die variablen 1-100
auf alle 4 schleifen
gleichmässig verteilt werden, so:

x1-A
x2-B
x3-C
x4-D
x5-A
x6-B

usw.

wie gekomme ich das hin, mit mod habe ich es bisher vergeblich versucht,
klar jede variable soll nur einmal verarbeitet werden.

cu

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]

jaenicke 22. Jan 2009 06:30

Re: Kleines Listenproblem
 
Wie wäre es mit:
Delphi-Quellcode:
if x mod 4 = 1 then
Delphi-Quellcode:
if x mod 4 = 2 then
usw.

Und du musst zwischen den Schleifen natürlich x wieder zurück auf den Startwert setzen.

Aber wozu das ganze? Das kannst du doch genauso gut auch in einer Schleife machen... :gruebel:

derhanes 22. Jan 2009 06:41

Re: Kleines Listenproblem
 
hi,

erstmal danke für die schnelle antwort!

Zitat:

Zitat von jaenicke
Aber wozu das ganze? Das kannst du doch genauso gut auch in einer Schleife machen... :gruebel:

also dann so:

Delphi-Quellcode:
if x mod 4 = 1 then
Delphi-Quellcode:
if x mod 4 = 2 then
Delphi-Quellcode:
if x mod 4 = 3 then
Delphi-Quellcode:
if x mod 4 = 0 then
das probiere ich gleich mal.

ich möchte eine formel die in einer schleife läuft,
auf 4threads verteilen um so hoffentlich etwas schneller zu sein.

cu

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]

alzaimar 22. Jan 2009 06:46

Re: Kleines Listenproblem (beginner)
 
Das wird nur funktionieren, wenn du zwei Prozessoren hast. Geht es nicht so: (1..50 => Thread 1 und 51..100 => Thread 2)?

derhanes 22. Jan 2009 07:13

Re: Kleines Listenproblem (beginner)
 
hi,

Zitat:

Zitat von alzaimar
Das wird nur funktionieren, wenn du zwei Prozessoren hast. Geht es nicht so: (1..50 => Thread 1 und 51..100 => Thread 2)?

ja ich habe einen 4kern prozessor von intel. einen Q6600, das aufteilen in gleichgrosse blöcke habe ich schon versucht,
nun würde ich gerne mal diese variante probieren.

also das mit:

Delphi-Quellcode:
if x mod 4 = 1 then
if x mod 4 = 2 then
if x mod 4 = 3 then
if x mod 4 = 0 then
geht soweit :thumb:

wie könnte ich es nun so erstellen, dass nun jeweils 2mal x pro schleife ausgefühert wird.

also so:

x1-A
x2-A
x3-B
x4-B
x5-C
x6-C
x7-D
x8-D
x9-A
.
.
.usw.

cu

jaenicke 22. Jan 2009 07:17

Re: Kleines Listenproblem (beginner)
 
Je komplizierter du das machst, desto mehr Rechenleistung geht für die Verteilung drauf, was bringt das?
Auch die Optimierung der Threads an sich, also wie du die verwaltest, kann sehr viel bringen.

Zitat:

Zitat von derhanes
wie könnte ich es nun so erstellen, dass nun jeweils 2mal x pro schleife ausgefühert wird.

Naja, dann nimmst du eben modulo 8 und schaust ob das jeweils den Wert hat, wo ist das Problem? :gruebel:
Delphi-Quellcode:
if (x mod 8) in [1, 2] then
usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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