Forum: Sonstige Fragen zu Delphi
Delphi
by Khabarakh,
28. Mai 2010
Jupp, Excel. Ich habe mal die Rechenzeit verzehnfacht, um Schwankungen auszugleichen. Ergebnis siehe oben: Jetzt ist es wirklich ganz egal, ob man nun in 10 oder 10000 Pixel partitioniert.
Die Daten noch dazu: 1920x1080, maximale Iterationstiefe 1000, Abbruchbedingung |z| > 2
Forum: Sonstige Fragen zu Delphi
Delphi
by Khabarakh,
28. Mai 2010
Ja, da würde ich auch auf Hyperthreading tippen. In der Zwischenzeit hab ich mal ein paar Werte von meinem Q6600 gesammelt :) .
http://imgur.com/3J3Rx.png
Wenn ich daraus mal ein Fazit ziehen darf: Zumindest bei diesem Problem ist der Interlocked-Aufruf im Vergleich zur eigentlichen Arbeit so billig, dass man eigentlich mit keiner vernünftigen Batchgröße etwas falsch machen kann :D .
Forum: Sonstige Fragen zu Delphi
Delphi
by Khabarakh,
27. Mai 2010
Wozu einen neuen Thread? Der alte bleibt bestehen und holt sich die nächsten zehn Zeilen. Ohne TPL könnte das etwa so aussehen:
var sharedY := 0;
for var i := 1 to Environment.ProcessorCount do
new Thread(->
begin
while true do
begin
var startY := Interlocked.Add(var sharedY, 10);
if startY >= Height then
Forum: Sonstige Fragen zu Delphi
Delphi
by Khabarakh,
27. Mai 2010
Hm, dafür habe ich eigentlich meine Ergebnisse gepostet ;) . 100 Zeilen pro Batch sind immer noch zu viel, 10 sehen gut aus.
Forum: Sonstige Fragen zu Delphi
Delphi
by Khabarakh,
22. Mai 2010
Das ist auf jeden Fall zu grobkörnig. Schon mit 100 Zeilen pro Batch komme ich nur noch auf 2,4-fache Geschwindigkeit (wenn man allerdings die Laufzeiten der einzelne Kerne zusammenzählt, kommt man fast an die Zeit des seriellen Algorithmus, Multithreading-Overhead ist also nicht mehr vorhanden).
Forum: Sonstige Fragen zu Delphi
Delphi
by Khabarakh,
22. Mai 2010
Ich weiß zwar nicht, was das genau heißt, aber hier wird wahrscheinlich das Problem liegen. Wenn du nur einzelne Zeilen oder gar Pixel nacheinander von verschiedenen Threads abarbeiten lässt, streiten sich die Threads zu oft um die gleiche Cache Line, wenn du zu viele Zeilen mit einer statischen Zuteilung abarbeiten lässt, muss am Schluss auf die restlichen Threads gewartet werden.
Ich habe es...