Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ein bisschen InlineAssembler hilfe :) (https://www.delphipraxis.net/143528-ein-bisschen-inlineassembler-hilfe.html)

Medium 7. Dez 2009 14:02

Re: Ein bisschen InlineAssembler hilfe :)
 
Ah, n ist vorab bestimmbar, alles klar :) Danke!

Amateurprofi 7. Dez 2009 19:59

Re: Ein bisschen InlineAssembler hilfe :)
 
@Medium:
ja, aber es ginge auch ohne das.
Nimm an du willst auf 4 Threads verteilen.
Thread 1 rechnet 1/1 + 1/5 + 1/9 ...
Thread 2 rechnet 1/2 + 1/6 + 1/10 ...
Thread 3 rechnet 1/3 + 1/7 + 1/11 ...
Thread 4 rechnet 1/4 + 1/8 + 1/12 ...
Der erste Thread startet also mit dem Divisor 1 und die folgenden Threads starten mit einem um jeweils 1 höheren Divisor und alle Threads erhöhen den Divisor jeweils um n.
Abbruchbedingung aller Thraeds ist Summe>=Zielwert.
(Im Nachherein wundert es mich, warum ich das so umständlich gemacht habe.)

Medium 7. Dez 2009 23:04

Re: Ein bisschen InlineAssembler hilfe :)
 
Da hättest du das gleiche Problem, dass ich auch gedanklich hatte, als ich den Algo als nicht parallelisierbar bezeichnet hab: Abbruchbedingung ist die Summe aller Thread-Teilergebnisse, d.h. sie müssten nach jeden Schritt synchronisiert, die Summe gebildet und dann ggf. fortgeführt werden. Zwar "erschlägt" man so viele Divisionen wie man CPUs hat auf ein Mal, jedoch ist der organisatorische Aufwand hoch. Und auch dass alle Threads nach jedem Zyklus angehalten werden müssen, und die Summe ja nur noch ein-threadig berechnet wird ist der Sache auch wenig dienlich.
Und was macht man, wenn n jetzt kein Vielfaches der CPU-Anzahl ist? Dann schießt man ggf. über das Ziel hinaus, und muss das noch extra behandeln. Letztlich müsste man es aber wohl auf einen Versuch ankommen lassen um das brauchbar zu bewerten :).

Amateurprofi 9. Dez 2009 22:17

Re: Ein bisschen InlineAssembler hilfe :)
 
@Medium:
Oh, ja, da hast du Recht: Abbruchbedingung wäre für alle Threads die Gesamtsumme. Da bin ich wohl zu kurz gehopst, als ich sage es ginge auch ohne den Wert n zu kennen.
Jedoch ist es kein Problem, wenn n kein Vielfaches der CPU-Anzahl ist. Man kann ja (und genau das macht auch mein Programm) nachdem alle Threads fertig sind, noch fehlende Glieder dazu addieren bzw. welche subtrahieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 Uhr.
Seite 4 von 4   « Erste     234   

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